SQL: рефакторинг запроса GROUP_CONCAT - PullRequest
1 голос
/ 03 декабря 2009

Моя конечная цель - создать тег ссылки на посты в блоге, теги относящиеся к должности.

В настоящее время мой запрос содержит 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

С помощью этой строки в своем коде на стороне сервера я разделяю ее запятой и перебираю для создания тегов. Однако теперь мне нужно создать эти ссылки, и мне нужно знать соответствующий идентификатор каждого из тегов, чтобы сгенерировать ссылку, например <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 таблица (без ПК):

post  tag
1     1

1 Ответ

1 голос
/ 03 декабря 2009

Вы можете попробовать добавить идентификатор для каждого элемента в списке групп с другим разделителем:

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;

Теперь вам просто нужно сделать дополнительное разбиение на точки с запятой, чтобы получить идентификатор и имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...