mysql - 同一列上的多个条件

标签 mysql sql relational-division

我看过很多关于此的帖子,但我看不到任何回答我问题的帖子。

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

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

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

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 的 parent_id 可以是 CATEGORY,而 FACILITY 的 parent_id 可以是 CATEGORY。

因此,例如,类别可以是住宿,子类别可以是酒店,设施可以是 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_id 1 26 可能是不可能的;您可能正在尝试获取包含一个另一个的记录。

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

相关文章:

php - 如何确保删除查询删除一行?

sql - 如何在 PostgreSQL 中有效地设置减法连接表?

mysql - MySQL 备份的最佳实践

mysql - 如何使用 Join 在 MySql 中应用索引

python - 具有默认 NULL 值的列在 SELECT python pymysql 上返回为(无,)

mysql - 选择 none in set

mysql - 将 2 个值合并到 1 列 MySQL

sql - 慢速选择 - PostgreSQL

mysql - 如何在MySql中返回具有相同列值的行

mysql - IN 对于许多元素