gpt4 book ai didi

php - 禁用唯一的 sql 行结果约束

转载 作者:太空宇宙 更新时间:2023-11-03 12:12:23 25 4
gpt4 key购买 nike

我循环遍历一个表,任务,存储每个任务的 NPC id,然后循环遍历表 NPC,并返回每个 NPC id 的所有 NPC 数据。

应该返回红色框内的值。

表:任务

enter image description here

表:npc

enter image description here

  • 我正在遍历所有从任务表接收到的 NPC_id,并转储数组以确保它没有丢失任何数据。没有数据丢失。

    var_dump($allNPCIDs);//所有 5 个结果

  • 然后转储查询以确保内爆的字符串没有丢失任何数据。没有数据丢失。

    var_dump($qry);//查询显示所有 5 个结果

问题:

  • 但是当我转储 $row 时,我遗漏了重复的 npd_id:

    var_dump($row);//缺少 1 行,重复的 npc_id

enter image description here

PHP:

foreach ($allNPCIDsPerQuest as $item) {
foreach ($item as $value) {
array_push($allNPCIDs, $value);
}
}
echo "DUMPING ARRAY";
var_dump($allNPCIDs);

//load NPC data
$qry =
'SELECT N.*
FROM npcs N
WHERE npc_id IN ("' . implode('", "', $allNPCIDs) . '")';

echo "DUMPING QRY STRING";
var_dump($qry);
$result = $mysqli->query($qry) or die(mysqli_error($mysqli));

$i = 0;
echo "DUMPING ROW DATA";
while ($row = $result->fetch_assoc()) {
var_dump($row);
$i++;
}

如何在 phpMyAdmin mySQL DB 中关闭删除重复行数据的约束?

最佳答案

这不是您可以关闭的约束。它是您正在执行的查询的结构。使用 IN (1,2,3,4,1) 与使用 IN (1,2,3,4) 相同。这只是筛选 npcs 表并决定是否选择特定行的条件。将 id 列出两次不会使该行在 npcs 表中存在两次...因此它不能被选择两次。

用那个 SELECT 不能完成你想要的。

你要么使用 UNION:

(SELECT * FROM npcs WHERE npc_id=1) UNION
(SELECT * FROM npcs WHERE npc_id=2) UNION
(SELECT * FROM npcs WHERE npc_id=3) UNION
(SELECT * FROM npcs WHERE npc_id=4) UNION
(SELECT * FROM npcs WHERE npc_id=1)

或者您首先将 ID 插入到临时表中,然后像这样选择:

SELECT N.* FROM npcs N JOIN temptable T on N.npc_id=T.npc_id

或者您在客户端执行此操作,使用循环对每个 ID 执行查询并将数据放在一起。

可能还有其他解决方案,但现在没有想到。

关于php - 禁用唯一的 sql 行结果约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23693722/

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