我想查询所有帖子的列表(在指定范围内),然后将每个帖子的所有评论作为列表或数组的排序。
我最初是为了每个帖子一遍又一遍地查询,但这似乎是单调的,好像它会导致性能问题。然后我找到了GROUP_CONCAT。问题是GROUP_CONCAT通过在结果之间放置一个字符来连接查询的每个结果。它默认使用逗号分隔结果,但这很麻烦,因为评论本身很可能包含逗号。
避免这种情况的唯一方法是使用一系列不常见的字符作为分隔符吗?这看起来很脏"脏"对我来说。有更好的方法吗?
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;
答案 0 :(得分:0)
有更好的方法吗?
当然不,GROUP_CONCAT()
是这里的最佳选择。同样,正如您已经指出的那样,您可以使用与默认,
不同的分隔符。
另外,如果你认为你的评论可能有一个逗号,那么你可以使用REPLACE()
字符串函数并在你将它们连成之前替换那些,
GROUP_CONCAT(REPLACE(body,',','')) AS comments