已经看过多个帖子,但是看不到任何答案。

基本上,我的数据库中有3个表,这些表与成员及其分类/分类有关。


成员(定义成员列表和相关数据)
member_taxonomy(使用partent id和枚举字段tax_type(CATEGORY,SUBCATEGORY,FACILITY)的组合来定义类别,子类别和设施
member_taxonomy_map(定义成员和member_taxonomy之间的映射)


我有一个成员页面,其中有多个选项,可通过指定一个或多个子类别和一个或多个功能来优化搜索。我一直在尝试使用查询在表上进行搜索:

SELECT members.*
FROM (members)
JOIN member_taxonomy_map ON member_taxonomy_map.member_id = members.id
WHERE member_taxonomy_map.taxonomy_id =  1
AND member_taxonomy_map.taxonomy_id =  26
AND members.active =  1
AND members.deleted =  0;


但是,这将返回0行,这与在同一列上具有多个where子句有关,但是我无法弄清楚该查询的外观。每次优化搜索时(可能有多达30个不同的选项来优化搜索),我需要添加一个附加的AND子句,以便仅返回具有这些映射的成员。

IN子句不起作用,因为这实际上将返回与这些特定值中的任何一个匹配的任何行,但这是不正确的,因为它需要与指定的值完全匹配。

希望有人能给我一些正确方向的指点。

提前致谢。

更新

taxonomy_id可能为1和26。我可能需要包括members_taxonomy_map表的架构。

id int
tax_name varchar
slug varchar
tax_type enum ('CATEGORY','CLASSIFICATION','FACILITY','RATING')
parent_id int
active int


因此,未设置父级ID的任何tax_type都是顶级CATEGORY。子类别具有parent_id CATEGORY。 CLASSIFICATION可以具有CATEGORY的parent_id,而FACILITY可以具有CATEGORY的parent_id。

因此,例如,类别可以是住宿,子类别可以是酒店,设施可以是wifi。因此,如果成员具有所有这三个项目,则它们在映射表中将具有3个条目。我需要能够对它们进行过滤,以便它根据住宿类型(即子类别-具有tax_type为CATEGORY但又具有父ID的条目建立过滤条件的查询),然后在此分类中。查询可能返回同一个成员的多个条目,但是我可以通过使用额外的SQL子句过滤掉这些条目来处理。

最佳答案

SELECT members.*
FROM (members)
JOIN member_taxonomy_map ON member_taxonomy_map.member_id = members.id
WHERE (member_taxonomy_map.taxonomy_id =  1
OR member_taxonomy_map.taxonomy_id =  26)
AND members.active =  1
AND members.deleted =  0;


taxonomy_id1的记录可能是不可能的;您可能正在尝试获取包含一个或另一个的记录。

关于mysql - 同一列上有多个条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9503725/

10-11 12:45
查看更多