MySQL:选择一个匹配多行的项目

时间:2017-10-21 18:20:08

标签: php mysql

我在MySQL中有一些(超过20个)表,它描述了许多不同级别(颜色,位置等)的项目。以下是“table01”

的示例
+----+----------+
| ID | property |
+----+----------+
|  1 | A        |
|  1 | B        |
|  2 | C        |
|  2 | B        |
+----+----------+

现在我想搜索符合多个条件的项目。以下查询工作正常

SELECT
  table01.ID, table01.property, table02.property, table03.property [...]
FROM
  table01
LEFT JOIN table02 ON table02.ID = table01.ID
LEFT JOIN table03 ON table03.ID = table01.ID
[...]
WHERE
  table01.property = "A"
  and table02.property = "B"
  and table03.property = "A"
  [...]

继承我的问题。我想在一个表中搜索与一些属性匹配的项目。例如(此查询显然不起作用)

table01.property = "A" AND table01.property = "B"

我不知道如何实现这一点,因为信息存储在多行中。

有什么建议吗?数据库非常庞大(每个表有几千个条目),并且不时添加新行。我应该通过PHP进行一些处理还是有纯粹的MySQL解决方案?

2 个答案:

答案 0 :(得分:2)

例如,您可以通过

来实现这一目标
SELECT ID,count(property) AS CNT FROM table01 
WHERE property = 'A' OR  property = 'B'
GROUP BY ID
HAVING CNT=2;

这将为您提供具有这两种属性的ID列表。

但是,它可以使用更多属性进行更复杂的检查,以检查更多表格并且难以处理。如果可能的话,重新考虑数据库模式可能更有用,至少要有一个包含属性的表,而不是多个。

答案 1 :(得分:0)

您可以使用@Gnudiff给出的查询和查询,如下所示:

SELECT
  table01.ID, table01.property, table02.property, table03.property [...]
FROM
  (SELECT *FROM table01 
   WHERE property = 'A' OR  property = 'B'
   GROUP BY ID
   HAVING count(property)=2) as table01
LEFT JOIN table02 ON table02.ID = table01.ID
LEFT JOIN table03 ON table03.ID = table01.ID
[...]
WHERE
  table02.property = "B"
  and table03.property = "A"
  [...]

Click here for Demo

希望它有所帮助!