gpt4 book ai didi

php - 带有 UNION 的限制性 WHERE IN SQL 语句

转载 作者:行者123 更新时间:2023-11-29 13:02:02 25 4
gpt4 key购买 nike

我有下表:

  • 卡片
  • 上传
  • 标签
  • tag_upload:标签和上传之间的关系。
  • card_tag:标签和卡片之间的关系。

卡 1 与标签“事件”、“rmc”和“病人”相关。

上传 1 与标签“事件”和“患者”相关。

上传 2 与标签“event”、“rmc”和“病人”相关。

查询 1:

我选择了标签“事件”和“患者”。

它应该返回 Upload 1、Upload 2 和 Card 1。

查询 2:

我选择了标签“事件”、“rmc”和“患者”。

它应该返回 Upload 1 和 Card 1。

问题:

我当前正在使用以下命令,但当我执行此操作时,查询 2 返回与查询 1 相同的结果:

如果卡片中有标签,那么选择卡片的查询会是什么样子?我可以看一下您可能使用的示例或逻辑流程吗?

这是我的第一个版本,试图得到我想要的东西。使用 PHPSpec 后将立即转换为可测试的代码。

解决方案

谢谢蛋蛋!

SELECT *
FROM(
SELECT cards.id, cards.name, cards.type,
cards.updated_at, cards.created_at, cards.image
FROM cards
JOIN card_tag ON card_tag.card_id = cards.id
JOIN tags ON card_tag.tag_id = tags.id
WHERE NOT tags.deleted
AND cards.type NOT IN ('','libraries')
AND cards.account_user_id = 1
AND tags.name IN ('rmc', 'test')
GROUP BY cards.id
HAVING COUNT(DISTINCT tags.id) = 1
UNION ALL
SELECT uploads.id, uploads.name, uploads.type,
uploads.updated_at, uploads.created_at, uploads.image
FROM uploads
JOIN tag_upload ON tag_upload.upload_id = uploads.id
JOIN tags ON tag_upload.tag_id = tags.id
WHERE NOT tags.deleted
AND uploads.type NOT IN ('','libraries')
AND uploads.account_user_id = 1
AND tags.name IN ('rmc','test')
GROUP BY uploads.id
HAVING COUNT(DISTINCT tags.id) = 2
) AS qry
ORDER BY `updated_at` DESC
LIMIT 0, 35

最佳答案

作为起点,考虑加入表格、分组和过滤结果:

SELECT   cards.id, cards.name, cards.type,
cards.updated_at, cards.created_at, cards.image
FROM cards
JOIN card_tag ON card_tag.card_id = cards.id
JOIN tags ON card_tag.tag_id = tags.id
WHERE NOT deleted
AND cards.type NOT IN ('','libraries')
AND cards.account_user_id = ?
AND tags.name IN ('event','patient')
GROUP BY cards.id
HAVING COUNT(DISTINCT tags.id) = 2

如果(card_id, tag_id)保证card_tag中是唯一的,则可以替换COUNT(DISTINCT Tags.id ) 与性能更高的 COUNT(*)

然后可以在 uploads 表上使用类似的查询UNION

关于php - 带有 UNION 的限制性 WHERE IN SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23206463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com