gpt4 book ai didi

php/mysql 验证以避免重复条目

转载 作者:行者123 更新时间:2023-11-30 22:15:53 25 4
gpt4 key购买 nike

表 LIST 有一个用户 (NUM_USER) 选择的项目 (ITEM_NAME),每个项目都有一个类别 (CATEGORY)。表 ITEM 具有所有可能的项目 (NAME),每个项目都有一个类别 (CATEGORY)

要显示特定类别中尚未出现在用户列表中的所有项目,我首先选择用户列表中的所有项目,然后选择某个类别中的所有项目,最后我区分数组以显示用户尚未选择的项目.

下面的代码正确显示了两个数组,但对于第三部分它只显示了

Array ( )  

无论我以何种顺序放置 2 个数组作为差异。几天后,我想知道我的数据库架构是否有问题 - 我认为这应该是一个简单的请求。

$sqlall="SELECT ITEM_NAME FROM LIST WHERE NUM_USER=23";
$resultall = $conn->query($sqlall);
if ($resultall->num_rows > 0) {


while($row = $resultall->fetch_assoc()) {

$new_array[ $row['id']] = $row;

echo "<br>
".$row["ITEM_NAME"]."";
}
echo "";

} else {
echo "0 results for category $CAT_NAME";
}


echo "<HR>";

$sql2="SELECT NAME FROM ITEM WHERE CATEGORY='2' ORDER BY `ITEM`.`QUANTITY` DESC ";
$result2 = $conn->query($sql2);
if ($result2->num_rows > 0) {

while($row = $result2->fetch_assoc()) {
$new_array2[ $row['id']] = $row;
echo "<br>

".$row["NAME"]."";
}
echo "";

} else {
echo "0 results for category $CAT_NAME";

}

echo "<HR>";

$remaining = array_diff($new_array, $new_array2);

print_r($remaining);

最佳答案

我认为您应该制定一个合适的数据库模式并构建一个查询以向您的数据库询问最终结果。使用查询语言询问数据库,而不是将数据拉到 PHP 中手动“比较”结果。这只是开销。

我已经稍微修改了您的架构以获得 SQLfiddle 的工作架构并用于演示目的。

首先演示:http://sqlfiddle.com/#!9/749fc/1/0

基本上,我已将列表重命名为购物车。更重要的变化是,购物车通过 user_iditem_id 关系为用户存储商品。我遗漏了 quantity,这不是问题,你知道如何排序。

CREATE TABLE Cart
(`id` int, `user_id` int, `item_id` int)
;
CREATE Table Items
(`id` int, `category` varchar(55), `name` varchar(20), `description` varchar(50))
;

INSERT INTO Items
(`id`, `category`, `name`, `description`)
VALUES
(1, 'cars', 'red car', 'a red car'),
(2, 'cars', 'blue car', 'a blue car without radio'),
(3, 'cars', 'blue truck', 'a blue truck with big wheels'),
(4, 'cars', 'a car', 'a car'),
(5, 'cars', 'b car', 'b radio'),
(6, 'cars', 'c truck', 'c truck'),
(7, 'balls', 'blue ball', 'big blue ball')
;

INSERT INTO Cart
(`id`, `user_id`, `item_id`)
VALUES
(1, '1', '1'),
(2, '1', '2'),
(3, '1', '3'),
(4, '2', '4'),
(5, '2', '4'),
(6, '2', '5')
;

现在,你的目标是

  • 显示所有项目
  • 来自特定类别
  • 尚未在用户购物车中

让我们尝试将其转换为“粗略的”SQL:

  • 从项目中选择 *
  • WHERE item.category = X
  • AND item.id NOT_IN other_table

注意:这里的关键是 WHERE 子句上的 NOT IN

当然,other_table 现在必须替换为对其他表的查询:

  • 选择所有 item_id
  • 来自购物车
  • WHERE user_id = Y

因此,当您将两者结合使用时,您最终会得到以下查询:

SELECT
item.id, item.category, item.name, item.description
FROM
Items item
WHERE
item.category = 'cars'
AND
item.id NOT IN
(SELECT item_id value FROM Cart WHERE user_id = 2)
;

关于php/mysql 验证以避免重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38309672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com