簡體   English   中英

自引用SQL語句

[英]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'
    );

您可以使用相關類別模式對本機EE標簽執行此操作 只需在您的主要產品channel:entries標簽之外創建一個新的channel:entries循環,或在需要時將其嵌入。

我建議將模板嵌入您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM