如何更好地连接SQL中其他表的结果

时间:2015-08-29 18:49:36

标签: mysql sql database database-design

我想查询所有帖子的列表(在指定范围内),然后将每个帖子的所有评论作为列表或数组的排序。

我最初是为了每个帖子一遍又一遍地查询,但这似乎是单调的,好像它会导致性能问题。然后我找到了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; 

Results of MySQL query

1 个答案:

答案 0 :(得分:0)

  

有更好的方法吗?

当然不,GROUP_CONCAT()是这里的最佳选择。同样,正如您已经指出的那样,您可以使用与默认,不同的分隔符。 另外,如果你认为你的评论可能有一个逗号,那么你可以使用REPLACE()字符串函数并在你将它们连成之前替换那些,

GROUP_CONCAT(REPLACE(body,',','')) AS comments