概述:我需要在ExpressionEngine中編寫自定義SQL問題。自引用SQL語句
我有一個產品表(exp_channel_titles)被分配了類別(exp_category_posts)。在EE類別中進行分組(在exp_categories中定義)。
這裏就是我試圖做...
基於當我顯示特定產品(單列),我要回去了產品表,並拉亂「建議」顯示產品的某個類別組中的類別。最後,我想確保從建議中排除顯示的產品。
我的SQL沒問題,但這在我的書中相當先進。我在這裏希望得到一些幫助。
到目前爲止,我可以得到單行,它是我感興趣的類別組的類別。但現在呢?
SELECT *
FROM exp_channel_titles
LEFT JOIN exp_category_posts
ON exp_channel_titles.entry_id = exp_category_posts.entry_id
LEFT JOIN exp_categories
ON exp_category_posts.cat_id = exp_categories.cat_id
WHERE exp_channel_titles.entry_id = "17" AND exp_categories.group_id = "3"
在此先感謝您的幫助。
- 更新 - 我想這是蠻力,但它的工作,差不多。
SELECT *
FROM exp_channel_titles my1
LEFT JOIN exp_category_posts my2
ON my1.entry_id = my2.entry_id
LEFT JOIN exp_category_posts my3
ON my1.entry_id = my3.entry_id
LEFT JOIN exp_category_posts my4
ON my1.entry_id = my4.entry_id
WHERE my3.cat_id = "7" AND my2.cat_id = "2" AND my1.entry_id != "17" AND my4.cat_id IN (
SELECT exp_category_posts.cat_id
FROM exp_category_posts
LEFT JOIN exp_categories ON exp_category_posts.cat_id = exp_categories.cat_id
WHERE exp_category_posts.entry_id = '17' AND exp_categories.group_id = '3'
)
由於我需要從3個不同的類別組類別來篩選我做3 LEFT JOIN的。前兩個只關注單個類別(2 =發佈,7 =音樂),第三個可以從子查詢返回多個值,所以我使用IN。 subquest要求entry_id = X(在這種情況下,17,這是顯示的主要/單個產品)我應該建議什麼類別的group_id = 3(音樂)?
最後一個問題是,由於子查詢返回了多行,因此主select可以返回dupes。我想要一個獨特的產品清單。現在怎麼辦?通過...分組?排序?
請原諒這個沒有問題的問題,但說實話谷歌糟糕的時候找到答案。有大量的垃圾示例,未解答的問題等。我知道這些概念,但我的語法很生疏。請幫兄弟出去。
如果有人看到任何簡單的方法來優化以上,我會很高興聽。再次感謝你。
THX。我會放棄這一點。我的主要問題是語法。我不知道如何做預選查詢。 AND ...位以上可能是我所需要的。我馬上報告。謝謝。 – 2012-02-28 16:13:46
我認爲這可能會做到。但是,如何讓子查詢返回多行。而不是ec.group_id =,我怎麼能說如果ec.group_id =是這個子查詢中的這些值之一? Thx again – 2012-02-28 16:27:16
更改'ec.group_id =('到'ec.group_id IN('並刪除子查詢中的'LIMIT 1' .....查看更新的答案。 – Travesty3 2012-02-28 16:29:20