SQL: Bir GROUP_CONCAT sorgu yeniden düzenleme

1 Cevap php

My eventual goal is to generate tag links for blog posts, the tags relating to the post.

Şu anda benim sorgu ile etiketleri ve benzeri tags sütun değeri geri dönen bir şey kapmak GROUP_CONCAT hangi vardır:

'Brooklyn, Manhattan, New York'

itibaren

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

Bu dize ile, benim sunucu tarafı kodu ben virgül o kadar bölme ve etiketleri oluşturmak için döngü ediyorum. Ancak, şimdi bu bağlantıları yapmak gerekiyor ve ben böyle <a href="?tag=1">New York</a> gibi bir bağlantı oluşturmak için etiketleri her ilgili id ​​bilmeniz gerekir. Benim HTML yapısı gibi olacaktır:

<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 tablosu:

id    name
1     Brooklyn
2     Manhattan

tags_items tablosu (yok pk):

post  tag
1     1

1 Cevap

Sen farklı bir ayırıcı w / grup listesindeki her öğenin kimliğini eklemeyi deneyebilirsiniz:

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;

Şimdi sadece id ve adını almak için yarı-iki nokta üst üste ek bir bölme yapmak olurdu.