概述:我需要在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