-1

過去数日間、この問題を解決しようとしていますが、助けていただければ幸いです。

taxonomy1 に term1 と taksonomy2 に term2 を持つ Return アイテムがあります。

これは私のクエリです:

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%')) AND ((terms_taxonomy.taxonomy =  '2') AND (term.pojam  LIKE '%term2%')))

次のように (AND を OR に置き換えます):

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

だから私はタクソノミー1にターム1とタクソノミー2にターム2を持つアイテムを取得しようとしています。

4

1 に答える 1

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
于 2012-11-23T11:17:53.190 に答える