2017-01-11 113 views
0

我構建了一個小型python API,它應該返回一個填充了所有必需鍵/值對的JSON。該鍵值剛剛從MySQL數據庫查詢,如:在MySQL結果中過濾NULL列

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方法對它們進行過濾?

回答

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); 
+0

謝謝你回答我的問題。在我的情況下,我使用python,但原理是一樣的。 – user3191334

+0

糟糕,抱歉,我沒有閱讀標籤。也許你應該把它轉換成Python併發布你的代碼,這樣你就可以接受一個正確的答案。 – Barmar