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);
这意味着一个产品在此表中有多个条目。
答案 0 :(得分:1)
在您的查询中
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
我希望有所帮助。
答案 1 :(得分:0)
无论您输入什么数据,您都不会拥有Merkmale_id为2和3的产品。您的意思是OR而不是AND吗?
答案 2 :(得分:0)
考虑到您对Walter答案的评论,您应该首先提出问题,为了实现您的目标,您必须GROUP BY
产品ID,并将您的条件置于HAVING
条款
SELECT produkte_eintraege_id
FROM produkte_eigenschaften
-- WHERE eigenschaften_merkmale_id IN(1, 2, 3)
GROUP BY produkte_eintraege_id
HAVING MAX(eigenschaften_merkmale_id IN (1, 2)) = 1
AND MAX(eigenschaften_merkmale_id = 3) = 1
这是 SQLFiddle 演示
然后您可以JOIN
返回produkte_eintraege
SELECT e.id, e.hersteller, e.titel, e.img_url
FROM
(
SELECT produkte_eintraege_id
FROM produkte_eigenschaften
-- WHERE eigenschaften_merkmale_id IN(1, 2, 3)
GROUP BY produkte_eintraege_id
HAVING MAX(eigenschaften_merkmale_id IN (1, 2)) = 1
AND MAX(eigenschaften_merkmale_id = 3) = 1
) q JOIN produkte_eintraege e
ON q.produkte_eintraege_id = e.id
ORDER BY hits DESC