mysqlデータベースから指定したフィールドで条件に合致するデータをクエリーし、json文字列に結合してjsonファイルをエクスポートする方法

7599 ワード

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という値があるのが特徴ですが、2文字目の内容がどれだけあっても空に戻りますので、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は1つのフィールドの重複しか処理できない場合、groupbyを使用して処理します.
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';

ここでは名前と電話番号の2つのフィールドで同じデータかどうかを判定します.