加入包含标签的另一个表

时间:2011-11-20 12:25:44

标签: php mysql sql

我有一个名为“posts”的表,其中包含以下结构:

post_id  |  post_body  | post_posterid

我还有一个名为“tags”的表:

tag_id  |  tag_name

第三个表存储两个表之间的关系(每个post_id将有多个tags_id作为单独的记录):

post_id  |  tag_id

这类似于我试图创建的stackoverflow标记。

但是我不知道如何在一个记录中加入表并连接每个帖子的标签。像这样:

post_id  |  post_body  |  post_postername  |  tag_id1  |  tag_id2  |  tag_id3  ..... tag_name1  |  tag_name2  | tag_name3 ....

因此,当使用PDO从mysql获取时,我可以避免进一步查询以获取标记名称。

修改 更多细节:

第一个表(“帖子”)包含帖子ID(唯一ID),发布消息和海报ID(唯一的海报ID,存储在表“海报”中)。 第二个表“tags”包含唯一tag_id的可能标签(如“php”,“vb.net”等,类似于stackoverflow)。 第三个表包含发布消息和标记之间的关系。所以它包含post_id及其对应的tag_id。可以为同一个帖子分配多个标签。

我想要的是:在查询时,我可以使用“海报”表加入“帖子”以获取名称。但我也想为每个帖子获取标签。

GROUP_CONCAT()是我的问题的答案。但是如何获取它作为tag_id - tag_name对,而不是字段中的所有tag_id和另一个中的所有tag_name。

例如:1-VB , 5-PHP , 19-SQL

我将在PHP中分离这些对

我的尝试与stackoverflow的标记系统相同。

1 个答案:

答案 0 :(得分:4)

关键字为GROUP_CONCAT

和查询就像

SELECT 
posts.*,
GROUP_CONCAT(tags.tag_name) tags
FROM
posts
LEFT JOIN relation ON relation.post_id  = posts.id
LEFT JOIN tags ON tags.tag_id = relation.tag_id
GROUP BY posts.id

希望这个帮助

相关问题