SELECT produkte_eintraege.id, produkte_eintraege.hersteller, produkte_eintraege.titel, produkte_eintraege.img_url
FROM produkte_eintraege JOIN produkte_eigenschaften
ON produkte_eintraege.id = produkte_eigenschaften.produkte_eintraege_id
WHERE (produkte_eigenschaften.eigenschaften_merkmale_id = 1
OR produkte_eigenschaften.eigenschaften_merkmale_id = 2)
AND (produkte_eigenschaften.eigenschaften_merkmale_id = 3)
ORDER by hits DESC
结果=空
SELECT produkte_eintraege.id, produkte_eintraege.hersteller, produkte_eintraege.titel, produkte_eintraege.img_url
FROM produkte_eintraege JOIN produkte_eigenschaften
ON produkte_eintraege.id = produkte_eigenschaften.produkte_eintraege_id
WHERE (produkte_eigenschaften.eigenschaften_merkmale_id = 1
OR produkte_eigenschaften.eigenschaften_merkmale_id = 2)
ORDER by hits DESC
结果=有效
这部分有什么问题吗?:
AND (produkte_eigenschaften.eigenschaften_merkmale_id = 3)
这是表格:
INSERT INTO `produkte_eigenschaften` (`produkte_eintraege_id`, `eigenschaften_merkmale_id`)
VALUES (1, 2), (7, 1), (1, 3);
这意味着一种产品在此表中有多个条目。
最佳答案
在您的查询中,您有
WHERE (produkte_eigenschaften.eigenschaften_merkmale_id = 1 OR produkte_eigenschaften.eigenschaften_merkmale_id = 2)
AND (produkte_eigenschaften.eigenschaften_merkmale_id = 3) ORDER by hits DESC
解释您所说的查询
SELECT *
FROM a join b
WHERE (a.id=1 OR a.id=2) AND (a.ID=3)
一个值不能同时等于 2 和 3。
解决方案:有两种解决方案可以解决您的问题:
SELECT pe.id, pe.hersteller, pe.titel, pe.img_url
FROM produkte_eintraege pe JOIN produkte_eigenschaften pe2 ON pe.id = pe2.produkte_eintraege_id
WHERE (pe2.eigenschaften_merkmale_id = 1
OR pe2.eigenschaften_merkmale_id = 2
OR pe2.eigenschaften_merkmale_id = 3) ORDER by hits DESC
或者您可以只使用IN
SELECT pe.id, pe.hersteller, pe.titel, pe.img_url FROM produkte_eintraege pe JOIN produkte_eigenschaften pe2 ON pe.id = pe2.produkte_eintraege_id
WHERE pe2.eigenschaften_merkmale_id IN (1,2,3) ORDER by hits DESC
希望对您有所帮助。
关于mysql - 表比较中的内连接多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19606748/