2012-03-26 77 views
0

我只是在學習MYSQL查詢的來龍去脈,但我遇到了一個包含項目的障礙,我很感謝您提供一些解決方案。SELECT其中ID與列表中的一個匹配

我有兩個表,第一包含一個參考入口(entry_id)和相關聯的修改(mod_id)以及修飾的它是指(mod_name)

表1中的類別:exp_store_product_options

mod_id  entry_id  mod_name 
3   2919   COLOR 
4   2311   SIZE 
5   2311   COLOR 
6   3301   COLOR 

第二表包含兩個相關字段,mod_id和opt_name

表2:exp_store_product_modifiers

mod_id  opt_name 
3   BLACK 
4   EU 44 
5   BROWN 
6   BROWN 

我想實現的是所有DISTINCT opt_name字段(通過mod_id上的連接)對應的entry_ids列表,我希望作爲一個整體傳入。

這裏是我到目前爲止的代碼,我相信它會做我所需要的,除了要求我循環遍歷每個條目ID的查詢,並且因爲每次迭代都無法滿足DISTINCT要求,一切都是獨特的。 (該{} sale_products標籤是從ExpressionEngine,並會在解析過程中環路爲我提供的是有關這個頁面

SELECT DISTINCT opt_name 
FROM exp_store_product_options 
INNER JOIN exp_store_product_modifiers 
ON exp_store_product_options.product_mod_id=exp_store_product_modifiers.product_mod_id 
{sale_products parse='inward'}entry_id = '{entry_id}' OR{/sale_products} 
AND mod_name = 'SIZE' 

的entry_id結果列表=========== =========================================

死後

爲了防止任何人試圖在ExpressionEngine的Expresso Store模塊中工作,並且需要在模板中構建一些基本的過濾器,下面是我最終要工作的代碼。非常類似於Ben的代碼,但是使用嵌入而不是直接插入entry_ids因爲問題解析順序:

模板:嵌入/ product_filter

{exp:query sql="SELECT DISTINCT opt_name 
FROM exp_store_product_modifiers 
LEFT JOIN exp_store_product_options 
ON exp_store_product_options.product_mod_id = exp_store_product_modifiers.product_mod_id 
WHERE exp_store_product_modifiers.entry_id IN ({embed:entry_ids}) 
AND exp_store_product_modifiers.mod_name = '{embed:filter_on}'" 
} 

<li><a href="#">{opt_name}</a></li> 
{/exp:query} 

與{}嵌入看起來像

{embed="embeds/product_filter" entry_ids="{sale_products backspace='1'}{entry_id},{/sale_products}" filter_on="SIZE"} 
+0

那麼你的問題是什麼?看來你已經找到了解決方案? – 2012-03-26 01:52:47

+0

Ben,我的問題是如何從關聯條目列表中獲取唯一opt_name的列表。基本上,我想要的英文版本是,對於這個入口ID列表,找到所有相關的opt_name並返回每個相關的一個實例。如果這有助於... – evanr 2012-03-26 02:05:43

+0

-evanr,請使用'IN'。我剛剛發佈了一個答案。 – 2012-03-26 02:07:51

回答

3

如果你有項的列表,你可以使用IN。此外,我會在這裏使用LEFT JOIN而不是INNER JOIN

SELECT DISTINCT opt_name 
FROM exp_store_product_options 
LEFT JOIN exp_store_product_modifiers 
    ON exp_store_product_options.product_mod_id = exp_store_product_modifiers.product_mod_id 
WHERE exp_store_product_options.entry_id IN (1,2,3) 
AND mod_name = 'SIZE' 
+0

和1,2,3將對應於第一個表中的entry_ids列? – evanr 2012-03-26 02:08:45

+0

@evanr,是的,那些是entry_ids。 – 2012-03-26 02:09:28

相關問題