我在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解决方案?
答案 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"
[...]
希望它有所帮助!