kurkuma 13.03.2012 17:26 mind

Скъюлопстач, помоги.
Если три таблицы: posts, tags, tags_links. Первая — список постов, вторая — список тегов, третья — связи между ними.
Нужно одним запросом выдёргивать посты вместе со списком тегов для каждого.
В таблице tags_links есть два поля: tag — это id тэга из таблицы tags и post — id поста из таблицы posts.
Как быть?

1. nya 13.03.2012 17:33 Home

подзапрос с group_concat

2. kurkumanya /1 13.03.2012 17:33 mind

благодарю, щас погуглю

3. nyakurkuma /2 13.03.2012 17:36 Home

что то типа select p.id, (select GROUP_CONCAT(t.name) from t2p join tags as t on t.id = t2p.tag_id where t2p.post_id = p.id) from post as p

4. nyanya /3 13.03.2012 17:37 Home

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

5. kurkumanya /4 13.03.2012 17:38 mind

тогда запросов много получится — допустим 10 постов выбираю: 1 запрос выбрать посты и еще 10 чтобы выбрать теги

6. nyakurkuma /5 13.03.2012 17:40 Home

не, 2 запроса. ты выбираешь все теги, которые есть в тех 10 постах. а потом раскладываешь по полочкам, типа post_tag[post.id].append(tag)

Do you really want to delete ?