在 MySQL 结果中过滤空列



我构建了一个小型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的每一行,但只是离开列,返回<null>。所以我得到的结果等于这个:

[
    {'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 查询达到我的目标,还是最好也选择<null>结果并在之后使用自定义 python 方法过滤它们?

不能在 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);

相关内容

  • 没有找到相关文章

最新更新