Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何扫描MySQL中的多个项目?_Mysql_Sql - Fatal编程技术网

如何扫描MySQL中的多个项目?

如何扫描MySQL中的多个项目?,mysql,sql,Mysql,Sql,我想从元素表中选择所有元素,但要有一个额外的列,说明它们的任何注释是否具有管理员状态。如果发布状态“admin”列的用户为1,则注释具有admin状态 我不知道如何扫描每个被查询元素的每个注释 在程序的另一部分中,有一个查询可以提取单个问题的所有注释,我能够推理如何确定那里的管理员状态,但是我想不出一种方法可以在一个查询中提取多个问题 SELECT comments.id, comments.elementID, comments.googleID, comments.time, comment

我想从元素表中选择所有元素,但要有一个额外的列,说明它们的任何注释是否具有管理员状态。如果发布状态“admin”列的用户为1,则注释具有admin状态

我不知道如何扫描每个被查询元素的每个注释

在程序的另一部分中,有一个查询可以提取单个问题的所有注释,我能够推理如何确定那里的管理员状态,但是我想不出一种方法可以在一个查询中提取多个问题

SELECT comments.id, comments.elementID, comments.googleID, comments.time, comments.body, users.name, users.admin
FROM comments
LEFT JOIN users ON comments.googleID = users.googleID
WHERE comments.elementID = ? AND comments.approved = 1
ORDER BY comments.time DESC

您可以将大小写表达式与
exists
谓词和相关子查询一起使用,如下所示:

SELECT 
    e.*,
    CASE WHEN EXISTS (
       SELECT 1 
       FROM comments c
       JOIN users u ON c.googleID = u.googleID
       WHERE e.googleID = c.googleID AND u.admin = 1
    ) THEN 'Yes' ELSE 'No' END AS AdminComment
FROM elements e;
或者您可以使用联接来表示它:

SELECT 
    e.*,
    CASE WHEN u.admin IS NOT NULL THEN 'Yes' ELSE 'No' END AS AdminComment
FROM elements e
LEFT JOIN comments c ON e.googleID = c.googleID 
LEFT JOIN users u ON c.googleID = u.googleID AND u.admin = 1

要知道哪些元素有管理员用户的注释,您只需执行以下操作:

SELECT C.elementID, MAX(U.admin) AS admin
FROM comments C
LEFT JOIN users U ON C.googleId = U.googleID
WHERE C.approved = 1
GROUP BY C.elementID;
然后使用附加的admin列获取所有元素:

SELECT E.*, CASE WHEN A.admin = 1 THEN 1 ELSE 0 END AS admin
FROM elements E
LEFT OUTER JOIN
    (SELECT C.elementID, MAX(U.admin) AS admin
     FROM comments C
     LEFT JOIN users U ON C.googleId = U.googleID
     WHERE C.approved = 1
     GROUP BY C.elementID) A
ON E.id = A.elementID

出于某种原因,你的每一篇文章都是否定的。另一个人的答案似乎有效。我不知道为什么。@Connorelsea这很奇怪,但我想也许我对你的数据做了一些不好的假设。你可以看到我在这里测试的示例:@Connorelsea哦,我想可能是因为我使用googleID而不是elementID进行了连接,也许是因为我把一行改成了“WHERE e.id=c.elementID and u.admin=1”,结果成功了。