1 Востаннє редагувалося bischenko (13.06.2014 01:27:33)

Тема: Як вибрати пости і їх теґи за вказаним теґом?

Є таблиця 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
;

мені майже вдалося домогтися бажаного результату, але як отрима замість ідентиіфакаторів теґів назви теґів?

2

Re: Як вибрати пости і їх теґи за вказаним теґом?

<?=base_url()."/img/pic/".$item['url']?>

Ось як я отримую адресу зображення на блозі . Можливо чимось допоможе .
Масив який ти отримуєш має повертати значення всіх колонок з табиці тегів .