2012-11-23 118 views
-1

我試圖解決這個問題過去幾天的任何幫助將不勝感激。mysql complex where query

我有一個退貨項目,其中在taxonomy1中有term1,在taksonomy2中有term2。

這是我的查詢:用以下(更換並用OR)的

WHERE (items.org = '2') AND (((terms_taxonomy.taxonomy = '1') AND (term.pojam LIKE '%term1%')) AND ((terms_taxonomy.taxonomy = '2') AND (term.pojam LIKE '%term2%'))) 

SELECT items.* 
FROM (`items`) 
LEFT JOIN `rel_taxonomy` ON `rel_taxonomy`.`item_id` = `items`.`id` 
LEFT JOIN `terms_taxonomy` ON `terms_taxonomy`.`terms_taxonomy_id` = `rel_taxonomy`.`terms_taxonomy_id` 
LEFT JOIN `terms` ON `term`.`id` = `terms_taxonomy`.`term_id` 
WHERE (items.org = '2') AND (((terms_taxonomy.taxonomy = '1') AND (term.pojam LIKE '%term1%')) AND ((terms_taxonomy.taxonomy = '2') AND (term.pojam LIKE '%term2%'))) 
GROUP BY `items`.`id` 

如果我更換線

WHERE (items.org = '2') AND (((terms_taxonomy.taxonomy = '1') AND (term.pojam LIKE '%term1%')) OR((terms_taxonomy.taxonomy = '2') AND (term.pojam LIKE '%term2%'))) 

一切正常精細。但我仍然需要AND。

表方案

items 
id | title | org 

rel_taxonomy 
item_id | terms_taxonomy_id 

terms_taxonomy 
terms_taxonomy_id | terms_id | taxsonomy 

terms 
id | term 

,所以我試圖讓它們具有在taksonomy2 taxonomy1和詞條2字詞1項。

+0

這是不是很清楚你想在這裏問什麼。 – PearsonArtPhoto

+0

正確 - 不要指望我們對你從非工作代碼提出的問題進行反向工程。你至少應該解釋你的表格模式。 –

+0

您可以根據需要顯示一些示例輸入數據和輸出嗎? –

回答

0

使用OR並添加HAVING條款

SELECT i.id 
FROM items i 
LEFT JOIN rel_taxonomy rt ON rt.item_id = i.id 
LEFT JOIN terms_taxonomy tt ON tt.terms_taxonomy_id = rt.terms_taxonomy_id 
LEFT JOIN terms t ON t.id = tt.term_id 
WHERE i.org = '2' 
AND 
( 
     (tt.taxonomy = '1' AND t.pojam LIKE '%term1%') 
    OR (tt.taxonomy = '2' AND t.pojam LIKE '%term2%') 
) 
GROUP BY i.id 
having count(distinct tt.taxonomy) = 2 
+0

@Mlajo:對我的答案的任何反饋? –

+0

是的,它似乎像魅力一樣工作。tanx – Mlajo

+0

並將左連接更改爲內連接 - where子句排除不相關記錄的行。 – symcbean