【问题标题】:Filter NULL columns in in MySQL result在 MySQL 结果中过滤 NULL 列
【发布时间】:2017-01-11 22:57:00
【问题描述】:

我构建了一个小型 python API,它应该返回一个包含所有必要键/值对的 JSON。键值只是从 MySQL 数据库中查询出来的:

SELECT * 
FROM flowers 
WHERE favourite = 1

输出:

id        color     size     favourite  ...
---------------------------------------------
1234      yellow    big      1          ...
1235      <null>    small    1          ...
1236      blue      <null>   1          ...
1237      <null>    <null>   1          ...

执行此查询将返回一个类似于此的数组:

[
    {'id': 1234, 'color': "yellow", 'size': "big", 'favourite': 1, ... },
    {'id': 1234, 'color': "<null>", 'size': "small", 'favourite': 1, ... },
    {'id': 1234, 'color': "blue", 'size': "<null>", 'favourite': 1, ... },
    {'id': 1234, 'color': "<null>", 'size': "<null>", 'favourite': 1, ... }
]

为了防止向客户发送任何无用的条目,我想选择我正在选择的内容。我的目标是继续选择favourite=1 所在的每一行,但只保留该列,返回&lt;null&gt;。所以我得到一个等于这个的结果:

[
    {'id': 1234, 'color': "yellow", 'size': "big", 'favourite': 1, ... },
    {'id': 1234, 'size': "small", 'favourite': 1, ... },
    {'id': 1234, 'color': "blue", 'favourite': 1, ... },
    {'id': 1234, 'favourite': 1, ... }
]

我也对表演很感兴趣。是否有可能/值得通过 MySQL 查询达到我的目标,还是最好也选择 &lt;null&gt; 结果并在之后使用自定义 python 方法过滤它们?

【问题讨论】:

    标签: python mysql null


    【解决方案1】:

    您不能在 SQL 中过滤列,因为列是在 SELECT 子句中指定的,并且所有行都有相同的列。您必须在 PHP 中执行此操作,方法是在将列添加到结果数组时对列进行循环。

    $result = array();
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $result_row = array();
        foreach ($row as $col => $value) {
            if ($value !== null) {
                $result_row[$col] = $value;
            }
        }
        $result[] = $result_row;
    }
    echo json_encode($result);
    

    【讨论】:

    • 谢谢你回答了我的问题。就我而言,我使用 python,但原理是一样的。
    • 糟糕,抱歉我没有阅读标签。也许您应该将其转换为 Python 并发布您的代码,以便您可以接受正确的答案。
    猜你喜欢
    • 2021-12-06
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多