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