如何解决检查选定的项目列表是否在另一个表中
| 我试图提供一些代码来检查用户是否拥有商品列表。项目列表可以是任何长度,但可能不超过5。 这里涉及2个表:qrequirements和清单。 我已经尽力运行一个循环来检查用户是否拥有每一项,但是我仍然坚持如何记录每一项的所有权结果以及如何将其传达给用户。 我可能会以错误的方式处理所有这一切,也许不知道有一种更简单的方法。 任何帮助都会很棒。到目前为止,这是我的代码:<?php
// Get the list of required items
$result = mysql_query(\"select * from qrequirements where qid=\'2\'\");
// This might return E.G:
// item1 = \'32\'
// item2 = \'24\'
// item3 = \'15\'
// Loop through each item to check the user has it
while ($row = mysql_fetch_array($result)) {
$itemid = $row[\"itemid\"];
$check_inv = mysql_query(\"select * from inventory where userid=\'$userid\' AND item = $itemid\");
$num_rows = mysql_num_rows($check_inv);
if($num_rows>=1){
// Something in here to confirm the item is owned by the user,while we check the others
}else{
echo \"You do not have this item\";
}
}
// Notify the user if they have all items required
?>
解决方法
确定用户需要但不需要的项目可以通过单个查询来解决。下面的查询应完成该任务。
SELECT * FROM qrequirements t1
WHERE t1.quid = \'2\'
AND NOT EXISTS ( SELECT 1 FROM inventory t2
WHERE t1.item = t2.item
AND t2.userid = \'$userid\')
如果您还需要知道用户拥有哪些项目,则此类似查询将完成该附加任务。
SELECT * FROM qrequirements t1
WHERE t1.quid = \'2\'
AND EXISTS ( SELECT 1 FROM inventory t2
WHERE t1.item = t2.item
AND t2.userid = \'$userid\')
另一个有用的查询是将返回所需项目以及用户是否拥有该项目的指示符的查询。如果用户没有项目,则item_count将为0;如果用户没有项目,则item_count将大于0。
SELECT t1.*,(SELECT count(*) FROM inventory t2
WHERE t1.item = t2.item
AND t2.userid = \'$userid\') as item_count
FROM qrequirements t1
WHERE t1.quid = \'2\'
, 尝试将此作为仅sql版本:
SELECT IF(COUNT(DISTINCT r.itemid) = COUNT(DISTINCT i.itemid),1,0) as met_reqirements
FROM qrequirements r
LEFT JOIN inventory i ON i.itemid = r.item_id AND i.userid = \'$userid\'
WHERE r.qid = 2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。