【问题标题】:Tricky multiple where condition MySQL Query棘手的多重where条件MySQL查询
【发布时间】:2012-04-13 16:43:51
【问题描述】:

我有一个表客户,一个具有不同标准的表(然后使用这些标准进行评分)。另一个表中包含值及其键。

table company
==============
int company_id
varchar name
bool status

table criteria
==============
int criteria_id
varchar name
bool status


table company_criteria
==============
int company_id
int criteria_id
int criteria_value
varchar comments 

现在我以选择框的形式显示所有标准,这些框将根据每个标准(已经在数据库中)有一个值。现在我希望用户能够搜索具有这些特定条件和存储价值的不同公司。

例如:表 customer 有一条 id 为 1 的记录 表条件有记录 1--->声誉,2-->薪水

table company_criteria 有以下记录:

   company_id | criteria_id | criteria_value |
   ============================================
        1            1            10
        1            2            20

现在用户会看到两个选择框(请记住条件表中有两条记录)- 带有不同的选项。他从第一个选择框中选择了 10 个,从第二个选择框中选择了 20 个。我将如何编写查询 - 我尝试了以下

 SELECT DISTINCT `co`.*
 FROM (`company` co)
 JOIN `company_criteria` cc ON `co`.`company_id` = `cc`.`company_id`
 WHERE (`cc`.`criteria_id`=1 AND `cc`.`criteria_value`>=10) AND (`cc`.`criteria_id`=2 AND `cc`.`criteria_value`>=20)

它只是不起作用 - 总是没有结果。感谢任何帮助 - 谢谢。

【问题讨论】:

    标签: mysql join where-clause


    【解决方案1】:

    您可能想在此处放置 AND 而不是 AND

    SELECT DISTINCT `co`.*
     FROM (`company` co)
     JOIN `company_criteria` cc ON `co`.`company_id` = `cc`.`company_id`
     WHERE (`cc`.`criteria_id`=1 AND `cc`.`criteria_value`>=10) OR (`cc`.`criteria_id`=2 AND `cc`.`criteria_value`>=20)
    

    在这两个条件之间......我认为它们不能同时为真

    【讨论】:

    • 这就是棘手的问题。表 company_criteria 将有更多的公司(id 1)记录,每个记录有两条记录(因为标准表中有两条记录)但具有不同的标准值。即具有不同价值的公司的一组标准记录。所以至少要匹配一个组。
    • 您的问题不清楚,请说清楚,以便整理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2013-08-01
    • 1970-01-01
    相关资源
    最近更新 更多