2013-10-26 42 views
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); 

這意味着一個產品在此表中有多個條目。

+0

假設這些查詢將運行在大型數據集上是安全的..因爲produkteigenschaften(德語)是「產品特徵:英語 –

回答

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演示

然後你可以JOINprodukte_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 
+0

太棒了!非常感謝,我已經嘗試了2個多小時。 – petek

0

無論您輸入什麼數據,您都不會購買Merkmale_id爲2和3的產品。您的意思是OR而不是AND?

+0

eigenschaften_merkmale_id:ID1 =身高5cm,ID2 =身高10cm,ID3 =寬度= 5cm,ID4 = 10釐米。一種產品(produkt_eintrage_id)是具有不同屬性的單一產品(eigenschaften_merkmale_id)。所以我想獲得產品的produkt_eintrage_id,那個高度是5釐米,寬度是10釐米,例如 – petek

+0

,但在這個例子中設置了第二個過濾器,所以我想要得到所有高度爲5釐米和10釐米,但只有寬度爲5釐米。 – petek

+0

所以我有第一個OR,然後AND – petek

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兩三個查詢。

SOLUTIONS:有可能解決您的問題兩個解決方案:

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 

我希望幫助。

+0

感謝您的快速回復。不完整,我需要什麼。 pe2.eigenschaften_merkmale_id就像一個過濾器。在這個例子中,如果pe2.eigenschaften_merkmale_id = 1或OR pe2.eigenschaften_merkmale_id = 2,但是或pe2.eigenschaften_merkmale_id必須是3,則無關緊要。 – petek

+0

我想要得到的所有產品的高度是5釐米或10釐米,但只有5釐米的寬度 – petek