カテゴリー
システム開発技術 小技

【簡単にCSVファイル】作成する方法

CSVファイルとは?

【comma-separated values】の略称
カンマ区切りのデータ及びテキストファイル

推測:機械が判別し易いように、項目毎にカンマ区切りされている。
仕様例:マスタ登録の機能でアップロードする際に使用される。

余談:画面からのマスタ登録の機能開発は、費用が高くなる為、費用が抑えられる一括アップロードでマスタ登録を実装するシステムもある。

CSV形式への加工(置換)方法

システムのマスタ登録の際に、使用できる技術

正規表現で、置換しダブルクォーテーションやシンブルクォーテーションで囲んだりして作成する。

今回は、私がよく使っているサクラエディタで紹介します。

➀テストデータの作成

基本的には、データベースで取得したデータや、Excelのデータで作ると思います。

データ出来たら、「Ctr + r」もしくは、メニューの「検索」から「置換」の選択

➁赤枠の部分を入力

置換前:(.*)\r\n
置換後:"\1",\r\n 

「すべて置換」を押したら完成

カテゴリー
PHP

【PHP】メモ

独自メソッド

ハイフンなし郵便番号へハイフンを入れる

PHP
function zipFormat($zipNumber) {
    $result = '〒 '. preg_replace("/(\d{3})(\d{4})/", "$1-$2", $zipNumber);
    return $result;
}

電話番号を3,3,4でハイフン

PHP
function phoneFormat($phoneNumber) {
    $result = preg_replace("/(\d{3})(\d{3})(\d{4})/", "$1-$2-$3", $phoneNumber);
    return $result;
}

CodeIgniter

軽量で速度重視のフレームワーク

メソッドの命名規則は、、、

PHP
 function get_user_id()

全部「小文字」で長ければ、「アンダースコア」で命名
基本キャメルケースだったから、違和感が(;・∀・)

デバック簡単設定

configファイルで設定
project/application/config/config.php

PHP
$config['log_threshold'] = [1,2];

logsの権限設定
ターミナルでコマンド

sudo chmod 777 project/application/logs

Bash
sudo chmod 777 project/application/logs

デフォルトのログファイルは、こちら「project/application/logs/」(^_-)-☆

デバックコード

変数・配列・実行クエリ

PHP
// 変数のデバック
log_message('debug', $user_id);
// 行番号追加
log_message('debug', 'line: '.__LINE__.' '.$user_id);
// 配列のデバック
log_message('debug', print_r($user_ids, true));
// 最終の実行クエリを表示
log_message('debug', $this->db->last_query());

配列のデバックの「print_r()メソッド」は、PHPのメソッドで第二引数にtrueを設定すると配列を表示してくれる(^_-)-☆

実行クエリの「last_query()」は、 CodeIgniterのヘルパーメソッド(^_^)/

CodeIgniterのあれこれ

デフォルトのエラーページ

show_404();

INSERTしたIDの取得

$this->db->insert_id();

INSERTかUPDATEした行数取得

$this->db->affected_rows();

まとめてINSERT
1レコードずつ登録するより効率的(^_-)-☆

// レコード作成
$recode = [
  ['name' => 'hosoda', 'age' => 28],
  ['name' => 'houhashi', 'age' => 35],
];

// ユーザーテーブルへ登録
$this->db->insert_batch('user', $recode);

Laravel

ララベラー

Laravel 5.1

Validation

public function rules()
{
 return [
   ’name’ => ‘required|max:255’,
   ’id’ => ‘required|max:255|unique:users,id,NULL,id,deleted_at,NULL’
 ];
}

integer

整数値判定:…-1, 0, 1…
範囲:-2147483648~+2147483647
上記2点を検証する。

integerを「min, max, between」を掛け合わせる事で、数値として検証してくれる。

unique

ModelのソフトデリートがValidationで効かない為、考えた結果

  1. 必須条件
  2. 最大値
  3. ユーザーIDがユニークかつソフトデリートを除外

‘id’ => ‘required|max:255|unique:users,id,NULL,id,deleted_at,NULL’

※今回編集画面の実装が無かった為、第3第4引数はIDのNULL除外を入れて対応

カテゴリー
SQL システム開発技術

【SQL】MySQLメモ

初回設定

日本語を使用する際は、文字コードを「utf8-general-ci」へ設定しましょう。
XAMPPのPHPMyadmin?初期値が文字化けするのになっているΣ(・ω・ノ)ノ

【MySQL】コマンド

ターミナルで実行するコマンド

dump:バックアップ

STGサーバーと本番サーバーは、バッチで自動バックアップしている会社さんは多いんですけど、開発環境は、バックアップしていない会社もありますので一週間に一回ぐらい自分でバックアップしておきましょう(^_-)-☆

Windowsコマンドプロンプトでの区切り文字は「\」です。

  • データベース全体
  mysqldump -u ユーザー名@ホスト名 -p -h ホスト名 データベース名 < 保存場所/ファイル名
  • 単体テーブル
  mysqldump -u ユーザー名@ホスト名 -p -h ホスト名 データベース名 テーブル名 < 保存場所/ファイル名
  • 複数テーブル
  mysql -u ユーザー名@ホスト名 -p -h ホスト名 データベース名 テーブル名 テーブル名 < 保存場所/ファイル名

dump:復元

  • dumpデータの読込み
  mysql -u ユーザー名@ホスト名 -p -h ホスト名 データベース名 < 保存場所/読込みファイル名

CRUD:create,read,update,delete

SQLの基本操作

【DROP TABLE】テーブル削除

※全テーブル削除は大変危険な為、コマンドはエディタで作成してから使いましょう。

  • 全テーブル削除

  DROP TABLE

  • 指定のテーブル削除

  DROP TABLE テーブル名, テーブル名

【 INSERT 】レコード作成

INSERT

INSERT INTO User (name, age) VALUE ('kenshi', 30);

BULK INSERT

BULK INSERT User VALUES ('sato', 32),  ('kenshi', 30),  ('yoshi', 24)  ; 

INSERTとBULK INSERTの速度チェック

今回は、データ新規登録時の実行速度を検証する。

検証内容

  • WindowsCommandPrompt(CMD)

   CMDからMySQLを起動し、SQL文を直接実行

  • ファイル読込み

   SQL文を記述したファイルをCMDから実行

  • 検証データ

   マスタ系10000件(9項目、ID,更新日,作成日…etc)で検証

検証結果

登録方法CMDファイル読込み
INSERT20分16分
BULK INSERT2分5秒

※CMDは、Windowsコマンドプロンプトから、MySQLを起動しQueryをペーストし実行

BULK INSERTをファイルに記述し、MySQLへ流し込む方法が早いことがわかった。

プレースホルダのエラー

2018/12時点
MySQLのプレースホルダの上限が「65535」個となっている。

7項目の10000データをPHPよりインサートした際に、出現したエラー

良い解決策が見つからず、1000行単位で分割し登録する方法にした。

便利なやつ

タイトルは気にしないでくれ!!

オートインクリメントのリセット

テストデータ作成している時に使う事がある。
・サンプルデータを削除
・テストデータを作成したり削除したりする時

ALTER TABLE `tablename` auto_increment = 1;

1を変更して1000にして、開発環境とSTGでIDを意図的に被らせないで作ったりできます。

外部制約を外す

これね!ミスったデータ消すのに本当面倒ですよね、、、

一旦外部キーを無効化

SET FOREIGN_KEY_CHECKS = 0

削除した後に戻す。

SET FOREIGN_KEY_CHECKS = 1

以上٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ

テーブルの文字コード変更

テーブル定義の文字コード変更

ALTER TABLE 「テーブル名」 CHARSET = utf8mb4;

既存のカラムの文字コード変更

ALTER TABLE 「テーブル名」 CONVERT TO CHARSET utf8mb4