繁体   English   中英

SQL:重构GROUP_CONCAT查询

[英]SQL: Refactoring a GROUP_CONCAT query

我的最终目标是为博客帖子生成标签链接,与帖子相关的标签。

当前,我的查询具有一个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

您可以尝试将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和名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM