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

これは、1 つの製品がこのテーブルに複数のエントリを持つことを意味します。

4

3 に答える 3

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 の両方にすることはできません。

解決策 : 問題を解決できる解決策が 2 つあります。

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

それが役立つことを願っています。

于 2013-10-26T12:45:54.840 に答える
0

どのようなデータを入力しても、Mercmale_id が 2 と 3 の両方である製品はありません。AND ではなく OR という意味ですか?

于 2013-10-26T12:38:51.167 に答える