【问题标题】:SQL query to search several rows with same id field but different parameter fieldSQL查询搜索具有相同id字段但不同参数字段的多行
【发布时间】:2012-06-18 04:10:43
【问题描述】:

我觉得这应该很简单,但我被卡住了。这就是我的数据库中所拥有的

id   field_value
----------------
41   Blue
42   Blue
43   Blue
43   Sweet
46   Blue   
47   Sweet

我需要选择只有$colour = blue AND $taste = sweet 的字段。 基本上我需要得到 43 的 id,因为它既有 Blue 又有 Sweet。我该怎么做?

【问题讨论】:

    标签: php sql database filter


    【解决方案1】:

    如果我理解正确;像这样的:

    $colour = (!isset($_GET['colour']) || empty($_GET['colour'])) ? '' : $_GET['colour'];
    $taste = (!isset($_GET['taste']) || empty($_GET['taste'])) ? '' : $_GET['taste'];
    
    $query = "SELECT * FROM table WHERE (parameter = '$colour') AND (parameter = '$taste')";
    

    【讨论】:

    • 用 AND 返回 0 行。当我使用 OR 时,它会找到行,但在这种情况下,有 2 个或更多参数会扩大搜索结果,我需要将其缩小。
    • 感谢您的帮助!你能看看我编辑的帖子。我想出了如何处理空值,但我仍然无法找到超过 1 个值的结果。
    【解决方案2】:

    在查询中使用查询。类似的东西;

    SELECT id
    FROM table
    WHERE field_value = 'Blue'
    AND
    id IN (SELECT id
        FROM table
        WHERE field_value = 'Sweet')
    GROUP BY id
    

    【讨论】:

    • 谢谢!看起来像我需要的。有没有办法让它有两个以上的变量?
    • 您可以在 CASE 语句中加入 AND 或添加更多 WHEN 选项。
    • 感谢您的回答,我对案例的工作方式感到有些困惑。也许它可以做得更容易。这是我选择field_value=Blru OR field_value=Sweetid field_valu 41 Blue 42 Blue 43 Blue 43 Sweet 46 Blue 47 Sweet 后的实际表,您可以看到只有 id 43 具有 Blue 和 Sweet。当我使用 AND 运行查询时,它什么也没显示。如何只选择那 43 个 id?
    • 好的,我想我现在明白了。编辑后的查询是否高于您所追求的?
    【解决方案3】:

    你通常会这样测试它:

    select id
      from table1
     where field_value in ('Blue', 'Sweet')
     group by id
    having count (distinct field_value) = 2
    

    = 2in () 列表中的项目数。

    Check out the test @ Sql Fiddle.

    【讨论】:

    • 该查询在 sql fiddle 中运行良好,但在 phpMyAdmin 中给了我一个错误。是sql版本问题还是smth?
    • @Julia 这是标准的 Sql。但是 MySql - 上帝保佑它古怪的灵魂 - 不喜欢函数后的空白。计数后去掉空白应该没问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2015-02-15
    • 2017-08-26
    • 1970-01-01
    • 2017-08-11
    相关资源
    最近更新 更多