PHP,MySQL选择帖子和评论

时间:2013-06-14 23:46:36

标签: php mysql

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

$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";

查询效果很好,如果帖子有多个注释,它会给我多个条目。 我一直在搜索,但不幸的是我无法重新编写我的查询以满足我的需求。 我真的希望有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

注意 - GROUP_CONCAT()的{​​{3}}默认值为1024.如果您的评论过长,则需要在运行GROUP_CONCAT()查询之前增加此评论,否则评论将被截断 - < / p>

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;

您还需要了解group_concat_max_len,因为这是您可以var_group_concat_max_len设置的限制。