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);


这意味着一个产品在此表中有多个条目。

最佳答案

考虑到您对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

09-11 20:02