SQL:重构GROUP_CONCAT查询

时间:2009-12-02 21:39:32

标签: php sql mysql

  

我最终的目标是生成标签   博客帖子,标签的链接   与该职位有关。

目前,我的查询有一个GROUP_CONCAT,用于抓取相关标签,返回的tags列值类似于:

'布鲁克林,曼哈顿,纽约'

SELECT 
post.id, 
post.name, 
GROUP_CONCAT( tags.name order by tags.name ) AS tags 
FROM post 
LEFT JOIN tags_items
  ON post.id = tags_items.post
LEFT JOIN tags
  ON tags_items.tag = tags.id

使用此字符串,在我的服务器端代码中,我将其用逗号分隔并循环生成标记。但是,现在我需要创建这些链接,我需要知道每个标记的相应ID,以便生成<a href="?tag=1">New York</a>之类的链接。我的HTML结构将是这样的:

<div class=post>
  <h2>Rakim Allah!</h2>
  <div class=tags>
    <a href="/tags/1">Brooklyn</a>
    <a href="/tags/2">Manhattan</a>
    <a href="/tags/3">New York</a>
  </div>
</div>

tags表:

id    name
1     Brooklyn
2     Manhattan

tags_items表(没有pk):

post  tag
1     1

1 个答案:

答案 0 :(得分:1)

您可以尝试使用不同的分隔符将ID添加到组列表中的每个项目:

SELECT post.id, post.name, 
GROUP_CONCAT( CONCAT(tags.id, ';', tags.name) order by tags.name ) AS tags 
FROM post 
LEFT JOIN tags 
          ON post.id = tags.post_id;

现在你只需要对分号进行额外拆分以获取id和名称。