1. 程式人生 > >如何從mysql資料庫中查詢指定欄位且符合條件的資料 ,然後拼接成json字串,最後匯出json檔案

如何從mysql資料庫中查詢指定欄位且符合條件的資料 ,然後拼接成json字串,最後匯出json檔案

SELECT CONCAT("{'name':'",IFNULL(Name,''),"',","'sex':'",IFNULL(Sex,''),"',","'age':'",IFNULL(Age,''),"',",
"'phone':'",IFNULL(Phone,''),"',","'birthday':'",IFNULL(Birthday,''),"'","},") from Student  where Status=9
 INTO OUTFILE '/var/lib/mysql-files/query_student.json';

在MySQL中CONCAT函式有一個特點就是有一個值為NULL那麼不管第二個字元有多少內容都返回為空了,所以我們使用IFNULL來取出想取出的資料。 如果我們要對取出的資料進行處理,如需要將男生定義為1,女生定義為2,我們可以使用case when來處理資料:

SELECT CONCAT("{'name':'",IFNULL(Name,''),"',","'sex':'",IFNULL(case when Sex LIKE "%男%" then 1 when Sex LIKE "%女%" then 2 end,''),"',","'age':'",IFNULL(Age,''),"',",
"'phone':'",IFNULL(Phone,''),"',","'birthday':'",IFNULL(Birthday,''),"'","},") from Student  where Status=9
 INTO OUTFILE '/var/lib/mysql-files/query_student.json'
;

這裡我們使用LIKE來判斷是男生還是女生,因為有的資料庫存的是“男”“女”,有的資料庫存的是“男生”“女生”等。 如果我們取出的名字欄位有轉義字元,那麼需要我們處理轉義字元:

SELECT CONCAT("{'name':'",IFNULL(REPLACE(Name,'\'','\\\''),''),"',","'sex':'",IFNULL(case when Sex LIKE "%男%" then 1 when Sex LIKE "%女%" then 2 end,''),"',","'age':'",IFNULL(Age,''),"',",
"'phone':'",IFNULL(Phone,''
),"',","'birthday':'",IFNULL(Birthday,''),"'","},") from Student where Status=9 INTO OUTFILE '/var/lib/mysql-files/query_student.json';

在這裡我們使用replace對名字中的轉義字元進行處理。 如果取出的資料有重複,且我們判定重複的條件為:幾個欄位相同才判定為相同,而distinct只能處理一個欄位重複的情況,這時我們使用group by來進行處理:

SELECT CONCAT("{'name':'",IFNULL(REPLACE(Name,'\'','\\\''),''),"',","'sex':'",IFNULL(case when Sex LIKE "%男%" then 1 when Sex LIKE "%女%" then 2 end,''),"',","'age':'",IFNULL(Age,''),"',",
"'phone':'",IFNULL(Phone,''),"',","'birthday':'",IFNULL(Birthday,''),"'","},") from Student  where Status=9 GROUP BY name,phone
 INTO OUTFILE '/var/lib/mysql-files/query_student.json';

這裡我們通過姓名和電話號碼兩個欄位判定是否是相同資料。