我有两个查询,但我希望结果位于同一个返回表中。
第一个查询返回所有帖子的列表及其评论作为列表。评论存储在不同的表格中。
SELECT E.id, E.time, E.title, E.body, E.type, C.comments
FROM elements E
LEFT JOIN(
SELECT elementID, GROUP_CONCAT(body SEPARATOR '|-|') AS comments
FROM comments
GROUP BY elementID
) C on C.elementID = E.id
第二个查询返回所有帖子的列表,其中包含该帖子作为新列的喜欢/投票数量的计数。喜欢的内容存储在不同的表格中。
SELECT E.id, E.googleID, E.title, L.likeCount
FROM elements E
LEFT JOIN (
SELECT elementID, COUNT(id) AS likeCount
FROM likes
GROUP BY elementID
) L ON L.elementID = E.id;
我如何在同一查询中将一个连续的评论列表作为列,并将一些喜欢作为列。
答案 0 :(得分:3)
那么,为什么你不能JOIN
这个查询就像你已经为其他查询做的那样
SELECT E.id, E.time, E.title, E.body, E.type, C.comments, E.googleID, L.likeCount
FROM elements E
LEFT JOIN(
SELECT elementID, GROUP_CONCAT(body SEPARATOR '|-|') AS comments
FROM comments
GROUP BY elementID
) C on C.elementID = E.id
LEFT JOIN (
SELECT elementID, COUNT(id) AS likeCount
FROM likes
GROUP BY elementID
) L ON L.elementID = E.id;
答案 1 :(得分:3)
您可以将同一级别的联接“堆叠”在一起,如下所示:
SELECT
E.id
, E.time
, E.title
, E.googleID
, E.body
, E.type
, C.comments
, L.likeCount
FROM elements E
LEFT JOIN(
SELECT elementID, GROUP_CONCAT(body SEPARATOR '|-|') AS comments
FROM comments
GROUP BY elementID
) C on C.elementID = E.id
LEFT JOIN (
SELECT elementID, COUNT(id) AS likeCount
FROM likes
GROUP BY elementID
) L ON L.elementID = E.id;
只需将要从两个连接返回的一组列放入选择列表中,然后将连接放在一起。
答案 2 :(得分:2)
SELECT E.id, E.time, E.title, E.body, E.type,
(SELECT GROUP_CONCAT(body SEPARATOR '|-|') AS comments
FROM comment c where C.elementID= E.id group by C.elementID) as comments,
(SELECT COUNT(id)
FROM likes L where L.elementID=E.id
GROUP BY elementID) as likeCount
FROM elements E