Тема: Як вибрати пости і їх теґи за вказаним теґом?
Є таблиця blog в якій зберігаються записи в блозі. Є також таблиця blogposts_tags і tags. В blogposts_tags зберігається id поста в блозі і асоційований з ним ідентифікатор теґу з таблиці tags. Як вибрати пост за теґом а також всі теґи які відносяться до цього допису?
mysql> desc blog;
+----------------------+----------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+----------------------+------+-----+-------------------+-----------------------------+
| blogpost_id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| title_en | varchar(300) | YES | | NULL | |
| title_ua | varchar(300) | YES | | NULL | |
| blogpost_en | text | YES | | NULL | |
| blogpost_ua | text | YES | | NULL | |
| date_added | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| blogpost_fragment_en | varchar(1000) | YES | | NULL | |
| blogpost_fragment_ua | varchar(1000) | YES | | NULL | |
+----------------------+----------------------+------+-----+-------------------+-----------------------------+
mysql> desc tags;
+-------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------------+------+-----+---------+----------------+
| id | smallint(8) unsigned | NO | PRI | NULL | auto_increment |
| tag | varchar(255) | NO | UNI | NULL | |
+-------+----------------------+------+-----+---------+----------------+
mysql> desc blogposts_tags;
+----------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| blogpost_id_fk | int(10) unsigned | NO | | NULL | |
| tag_id_fk | int(10) unsigned | NO | | NULL | |
+----------------+------------------+------+-----+---------+----------------+
Трохи модифікувавши цей запит (який я взяв звідси ):
SELECT posts.id, GROUP_CONCAT(post_tags.tag) AS additional_tags
FROM posts LEFT OUTER JOIN post_tags ON posts.id = post_tags.post_id
WHERE posts.id IN (SELECT post_id FROM post_tags WHERE tag = :search_tag)
AND post_tags.tag <> :search_tag
GROUP BY posts.id
на отакий:
SELECT GROUP_CONCAT(blogposts_tags.tag_id_fk) AS tags,
blog.blogpost_fragment_en, blog.blogpost_fragment_ua,
blog.title_en, blog.title_ua,
blog.date_added, blog.blogpost_id FROM blog
LEFT OUTER JOIN blogposts_tags ON blog.blogpost_id = blogposts_tags.blogpost_id_fk
WHERE blog.blogpost_id IN (SELECT blogpost_id_fk FROM blogposts_tags WHERE tag_id_fk = 3)
GROUP BY blogpost_id
;
мені майже вдалося домогтися бажаного результату, але як отрима замість ідентиіфакаторів теґів назви теґів?