2

我的脚本有问题,需要选择我所有的帖子和相关评论。现在我有以下查询:

$sql = "SELECT posts.post_title, posts.post_modified, post_content,update_modified, update_content 
    FROM   posts 
    LEFT JOIN updates
    ON posts.post_ID = updates.update_post_ID";

查询效果很好,除了如果帖子有多个评论,它会给我多个条目。我四处搜索,但不幸的是,我无法根据需要重新编写查询脚本。我真的希望有人可以帮助我吗?

4

2 回答 2

1

如果您只想返回每个帖子的 1 行,以及帖子的所有评论,最简单的方法是使用GROUP_CONCAT(). 这将返回所有列数据的 csv。假设这update_content是帖子评论,请尝试类似 -

SELECT posts.post_title, posts.post_modified, post_content, GROUP_CONCAT(update_modified), GROUP_CONCAT(update_content) 
FROM   posts 
LEFT JOIN updates
ON posts.post_ID = updates.update_post_ID
GROUP BY updates.update_post_ID

注意 -默认值为 1024。如果您GROUP_CONCAT()group_concat_max_len评论变得太长,您将需要在运行GROUP_CONCAT()查询之前增加它,否则评论将被截断 -

SET [GLOBAL | SESSION] group_concat_max_len = 10240; // must be in multiples of 1024
SELECT id, name
GROUP_CONCAT(comment) AS comment
FROM table
GROUP BY name;

您还需要注意,max_allowed_packet因为这是您可以设置的限制var_group_concat_max_len

于 2013-06-15T00:13:20.193 回答
1

我认为您想要 DISTINCT 关键字,用于SELECT DISTINCT ...避免重复。但是,如果我理解正确,您的评论在更新表中,并且您正在拉update_modifiedupdate_content您的记录集。因此,假设这些(可能)是唯一值,那么 DISTINCT 不会将它们折叠起来。最好只updates.update_post_ID使用 DISTINCT 提取,然后根据您在需要时检索的 ID 从更新中提取您需要的任何内容。

于 2013-06-14T23:58:24.360 回答