Mysql 需要弄清楚如何显示单个用户没有的所有内容';我没有

Mysql 需要弄清楚如何显示单个用户没有的所有内容';我没有,mysql,Mysql,我正在寻找合适的方式来表达。。。我目前有一个公式: SELECT * FROM useritems JOIN (iteminfo) ON (iteminfo.id=useritems.itemid) WHERE active='Y' AND userid!='$userid' ORDER BY itemid DESC LIMIT 40"; 设计用于显示用户(a)没有的所有项目 假设用户有一个项目: A、 B,C,D,E,F 理

我正在寻找合适的方式来表达。。。我目前有一个公式:

 SELECT * 
     FROM useritems JOIN (iteminfo) 
         ON (iteminfo.id=useritems.itemid) 
     WHERE active='Y' AND userid!='$userid' 
     ORDER BY itemid DESC LIMIT 40";
设计用于显示用户(a)没有的所有项目

假设用户有一个项目: A、 B,C,D,E,F

理论上,该公式将只显示G-Z


我的问题是,如果用户B有A、B、C项,这些项会显示在这个列表中,因为不是用户A有它们。。。用户B拥有它们(因此它不是用户A)。如何防止这些项目出现在用户A的提要中,因为用户B拥有它们?

您需要做的是获取所有可能存在于
itemInfo
表中的
项目
,然后通过使用
左连接
并选择显示为
NULL
的项目,找到
A
没有的所有项目

SELECT *
    FROM useritems AS 'u'
        LEFT JOIN (SELECT * FROM itemInfo GROUP BY item) AS 'i'
            ON u.id=i.itemid
    WHERE active='Y' AND userid='$userid' AND i.item IS NULL 
    ORDER BY itemid DESC LIMIT 40;

您的查询显示的是除A以外的所有用户持有的项目。您可以使用子查询返回用户持有的所有项目,然后使用
NOT IN
排除这些项目

SELECT *
FROM iteminfo
WHERE id NOT IN (
    SELECT itemid
    FROM useritems
    WHERE active = 'Y' AND userid = '$userid'
)
ORDER BY id DESC LIMIT 40
或等效的
左连接

SELECT i.*
FROM iteminfo AS i
LEFT JOIN useritems AS u ON i.id = u.itemid AND u.active = 'Y' AND u.userid = '$userid'
WHERE u.itemid IS NULL
ORDER BY i.id DESC LIMIT 40

这看起来是一个左连接的好例子。我会这样做:

SELECT iteminfo.itemid
FROM iteminfo
LEFT JOIN useritems ON (iteminfo.id=useritems.itemid) AND (useritems.userid = '$userid')
WHERE active='Y' AND userid IS NULL
ORDER BY itemid DESC LIMIT 40";

这是假设userid在useritems表中。左键连接userid将为每个iteminfo条目获取一行,在WHERE中检查它们是否为null将为您提供所有与userid不匹配的iteminfo条目。

您没有显示用户a没有的所有内容。你展示了除A以外的所有用户。我刚刚意识到这是我的问题…你知道如何弥合这一差距吗?这篇文章没有显示它应该向我展示的地方4things@MikEsy我不知道你的专栏叫什么。您需要编辑此帖子以反映警告:mysqli_num_rows()希望参数1为mysqli_result,在第210行(第2行)的C:\wamp\www\index.php中给出布尔值。啊,只需更改SELECT中的参数或您要查找的结果类型。。。我已经修改了它,只包含您想要的列,但看起来您正在寻找一个布尔值。将它改回*可能会也可能不会修复它,我不知道你的专栏是什么。好的,第一个很好用!我想按降序排列,最多40件……你能帮我吗?我在其他方面遇到了一个错误,只需将
orderby
子句添加到任一查询的末尾即可。它应该是
id
,而不是
itemid
,因为主表是
iteminfo