我有以下表格
updates
,tags
,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 :(得分: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`