投稿

ラベル(sql)が付いた投稿を表示しています

住所を北から並べる(都道府県コード または 郵便番号と電話番号)

SQLで顧客情報の検索結果を並び替える 都道府県コード 順に並べる場合、都道府県コードのテーブル(1, 北海道)等に連結するのが正しいやり方 (下は住所の先頭2文字あたりで連結している) SELECT * FROM cust_table LEFT JOIN area_table ON SUBSTR(cust_table.jusyo, 1, 2) = SUBSTR(area_table.areaname, 1, 2) WHERE ... ORDER BY areaindex; ただし、住所が都道府県から入っている必要あり、入っていないと先頭にきます 都道府県コードに郵便番号や市外局番なんかも入れておくとよいかもね そんなの面倒くせ~とか、テーブル追加できない場合 → 郵便番号と電話番号でなんとかしてみる どちらも都道府県コードとは並びが違います 郵便番号 = 北陸、東北や北海道の一部が、九州沖縄より後ろになる 電話番号 = 中国、九州の並びがおかしくなる 電話番号の市外局番が 01 か 02 で始まらない所は、電話番号の 左2桁 それ以外は、電話番号順(全桁)でソート 次に郵便番号でソート この組み合わせで 「北陸東北北海道は電話番号、それ以外は郵便番号」なソートになります SELECT * FROM cust_table ORDER BY CASE WHEN (SUBSTR(phone, 2, 1) <> '1') AND (SUBSTR(phone, 2, 1) <> '2') THEN SUBSTR(phone, 1, 2) ELSE phone '; END, zipcode; で、何となく北からブロック毎に分かれてくれます あれ?北陸あたりが...

PHP の PDO で debugDumpParams の出力をファイルなどに保存

SQL の実行結果を確認しようにも bindValue や bindParam を使っていると、実行内容を取得できない debugDumpParams を利用すると SQL へ渡った情報を標準出力に吐き出すことが出来る その内容をファイルなどに保存する $stmt -> execute (); if ( ob_start ( 'callback' ) ){      try {          $stmt -> debugDumpParams ();     } finally {          // ob_end_flush();          ob_end_clean (); // callback からの戻り値を出力しない     } } function callback ( $buffer ){      file_put_contents ( 'sqlresult.txt' , $buffer );      return $buffer ; } 通常は execute() の直後に debugDumpParams() を呼び出せば、標準出力に吐き出されますが ob_start(関数名) で、内容をコールバック関数へ渡しています。今回は 標準出力へ表示する必要が無いので、ob_end_clean() を用いていますが、callback の戻り値を出力する場合は ob_end_flush() を利用します。 $stmt -> execute (); if ( ob_start ( 'callback' ) ){      try {        ...