2012-03-26 44 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

相关问题