2017-03-09 13 views
0

I持って、次の表フィルタの更新タグの選択に基づいて、それぞれの更新に関連するすべてのタグを表示

updatestags、私が選択したタグに基づいてアップデートをフィルタリングするには、次の問合せを使用しupdates_tags

SELECT 
`updates`.`id` as `update_id`, 
`updates`.`body` as `update`, 
group_concat(DISTINCT `tags`.`title` ORDER BY `tags`.`title` ASC SEPARATOR ", ") AS tags 
FROM `updates` 
LEFT JOIN `updates_tags` ON `updates`.`id` = `updates_tags`.`update_id` 
LEFT JOIN `tags` ON `updates_tags`.`tag_id` = `tags`.`id` 
WHERE `updates_tags`.`tag_id` IN (?) #### <- FILTER #### 
GROUP BY `updates`.`id` 

私はまた、アップデートに関連するすべてのタグを持つ列を持っているしかしフィルタを維持したいと思います。おそらくGROUP_CONCATとやり取りするか、あるいはJOINが必要かもしれません。

+0

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-veryを参照してください。 -simple-sql-query – Strawberry

+0

私の質問は有効だと思います。はい、私はデータセットを持っていませんが、私の説明は誰かが私が求めていることを理解するのに十分なほど明確でした。私は正しい答えを得た。 – Ando

+0

データセットがなく、望ましい結果が得られない場合は、私たちは決して知らないでしょう。 – Strawberry

答えて

0

あなたのクエリはよさそうです。カンマで区切られたフィルタのタグIDのリストを渡すだけで済みます。

SELECT 
    `u1`.`id` AS `update_id`, 
    `u1`.`body` AS `update`, 
    GROUP_CONCAT(DISTINCT `t1`.`title` ORDER BY `t1`.`title` ASC SEPARATOR ', ') AS `tags` 
FROM `updates` AS `u1` 
INNER JOIN `updates_tags` AS `ut1` ON (`u1`.`id` = `ut1`.`update_id`) 
INNER JOIN `tags` AS `t1` ON (`ut1`.`tag_id` = `t1`.`id`) 
INNER JOIN `updates_tags` AS `ut2` ON (`u1`.`id` = `ut2`.`update_id`) 
INNER JOIN `tags` AS `t2` ON (`ut2`.`tag_id` = `t2`.`id` AND `t2`.`id` IN (3, 4)) 
GROUP BY `u1`.`id` 
+0

1つ以上のタグIDだけでなく、タグIDに基づいてすべてのタグIDを持つ更新を表示したいとします。現時点では、私が(あなたのように)タグIDに基づいてフィルタリングすると、更新に関係するすべてのタグを取得できません。 – Ando

+0

ああ、私は参照してください。スタンバイ、私の答えを更新します。 – fubar

+0

@Ando - updated – fubar

関連する問題