我构建了一个小的python API,它应该返回一个充满所有必要键/值对的JSON。只需从MySQL DB中查询关键值,如:
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方法过滤它们?
答案 0 :(得分: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);