2012-11-23 59 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