php - MySQL查询题..我放弃!

标签 php sql mysql database

*UPDATE,似乎给出了答案,但是 SQL 查询出错了.. 任何人都可以帮忙吗?看到第一个答案,我把问题贴在那里。

简单来说。我有 3 张 table 。一个“项目”表和一个“标签”表。然后我还有一个“item_tag”表,将两者联系在一起。

我想进行一个查询,列出所有分配有特定标签的项目。所以我希望查询列出所有应用了标签 x 和标签 y 的项目。

这是我到目前为止想出的。除了这将列出匹配标签 ID 148 或标签 ID 152 的任何内容。如果我让它说“AND”,则不会显示任何结果。

SELECT *
FROM (`item`)
RIGHT OUTER JOIN `item_tag` ON `item`.`id` = `item_tag`.`fk_item_id`
WHERE `item_tag`.`fk_tag_id` = "152" OR `item_tag`.`fk_tag_id` = "148"
GROUP BY `item`.`id`

最佳答案

使用 JOIN:

 SELECT it.fk_item_id
   FROM ITEM i
   JOIN ITEM_TAG it1 ON it1.fk_item_id = i.id
                    AND it1.fk_tag_id = 148
   JOIN ITEM_TAG it2 ON it2.fk_item_id = i.id
                    AND it2.fk_tag_id = 152

使用 GROUP BY/HAVING COUNT:

  SELECT it.fk_item_id
    FROM ITEM_TAG it
   WHERE it.fk_tag_id IN (148, 152)
GROUP BY it.fk_item_id
  HAVING COUNT(*) = 2

买者自负:
查询的 GROUP BY/HAVING COUNT 版本取决于您的数据模型是否具有为所涉及的两列定义的唯一或主要复合键(fk_item_idfk_tag_id).如果这没有到位,数据库将不会停止添加重复项。如果数据中可能存在重复行,此版本可能会返回误报,因为 item_id 可能与 tag_id 有 2 个关联 148 - 这将满足 HAVING COUNT (*) = 2

关于php - MySQL查询题..我放弃!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1878246/

相关文章:

php - 解析 HTML 中的多个 PHP 代码块

php - oracle中的日期类型不包含时间值

php - MySQL 语法错误 SQL 错误 [1064] [42000] : You have an error in your SQL syntax

sql - 用于 BIRT 的多个 SQL 条件的 IF-ELSE 替代方案

php - 像stackoverflow这样的积分系统

php - 有没有一个好的库可以用 php 分割一个 mp3

SQL:如何从一行的列值构建字符串?

python - Django UpdateView 有空表格

mysql - 在sql查询中添加来自另一个表的计数

MySQL - 一行中的多个值