[英]Self-referencing SQL statement
概述:我需要在ExpressionEngine中編寫一個自定義SQL問題。
我有一個分配了類別(exp_category_posts)的產品表(exp_channel_titles)。 在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。 子請求詢問entry_id = X(在本例中為17,這是顯示的主要/單個產品)我應該建議group_id = 3(音樂)中的哪些類別?
最后一個問題是,由於子查詢返回了多行,所以主選擇可以返回重復。 我想要一份獨特的產品清單。 現在怎么辦? 通過...分組? 訂購順序?
請原諒這個nooby問題,但老實說Google在尋找答案時很爛。 有很多廢話示例,未解決的問題等。我知道這些概念,但是我的語法很生疏。 請幫一個兄弟。
如果有人看到任何簡單的方法來優化上述內容,我將很高興聽。 再次感謝你。
免責聲明:不確定這是否行得通,很可能可以通過一些優化來完成,但是也許行得通:
SELECT DISTINCT ect.*
FROM
exp_channel_titles ect
LEFT JOIN exp_category_posts ecp ON ect.entry_id = ecp.entry_id
LEFT JOIN exp_categories ec ON ecp.cat_id = ec.cat_id
WHERE
ect.entry_id != '17'
AND ec.group_id IN (
SELECT ec.group_id
FROM
exp_channel_titles ect
LEFT JOIN exp_category_posts ecp ON ect.entry_id = ecp.entry_id
LEFT JOIN exp_categories ec ON ecp.cat_id = ec.cat_id
WHERE
ect.entry_id = '17'
);
我建議將模板嵌入您的channel:entries循環中,並將當前entry_id作為嵌入參數傳遞。
{embed="embeds/related_products" entry_id="{entry_id}"}
然后在您的嵌入式模板中:
{exp:channel:entries channel="products" category_group="3|4" entry_id="not {embed:entry_id}" limit="5" orderby="random"}
// variables here
{/exp:channel:entries}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.