2017-01-11 18 views
0

小さなPython APIを構築しました。必要なすべてのキーと値のペアが入ったJSONを返さなければなりません。出力フィルタ結果NULLカラムin MySQL結果

SELECT * 
FROM flowers 
WHERE favourite = 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, ... } 
] 

:このクエリを実行する

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

はこのようになります配列を返しますキーの値が同じようにMySQLのDBから照会されますクライアントに無駄なエントリを送信するのを防ぐために、私が選択しているものを選択したいと思います。私の目標は、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メソッドでフィルタリングする方が良いでしょうか?

答えて

1

列がSELECT句で指定され、すべての行が同じ列を持つため、SQLで列をフィルタリングできません。結果配列に追加するときに列をループすることで、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); 
+0

私の質問にお答えします。私の場合、私はPythonを使用しますが、原則は同じです。 – user3191334

+0

おっと、申し訳ありませんが、タグを読んでいませんでした。おそらく、これをPythonに変換してコードを投稿して、適切な答えを受け入れることができます。 – Barmar