【参考サイト】
■整形ツール
WebToolBox(SQL、Json整形)
■変数名
codic
プログラミングの変数・メソッドの命名でよく使う英単語まとめ
■判定
PHP isset, empty, is_null の違い早見表
■演算子
PHPの演算子一覧:種類や使い方を解説(php8対応)
【Laravel保存処理】
■isDirty():データが更新されたかどうか確認
https://minory.org/laravel-isdirty-getdirty.html
■touch():モデルで更新日(updated_at)のみ変更する
https://pgmemo.tokyo/data/archives/1311.html
■save():更新データとの差分を見て更新するか決めてる
■update():更新データとの差分を見てないで更新
この時、もし$request->nameが既存データと同じデータだとしたら
save()
updated_atのカラムが更新されない
update()
updated_atのカラムが更新される
https://qiita.com/gomaaa/items/91e5cbd319279a2db6ec
■insertGetId()
テーブルにinsertしたデータのIDなどを取得する方法
https://goldenshield.hatenablog.com/entry/2018/10/21/154125
■updateOrCreate()
updateOrCreateメソッドを利用して登録・更新ロジックを共通化
https://zenn.dev/naonao70/articles/48d75bf2cc793e
■Pivotクラス(中間テーブルのモデル)
https://qiita.com/kkznch/items/72ff650737eff863e4d9
■Pivot中間テーブルに保存する方法【attach・sync・detach】
https://biz.addisteria.com/pivot_attach/
【DB関係】
■SQLのWHERE 1=1と WHERE 1=0
https://blog.hitsujin.jp/entry/2020/02/14/210000
※初期表示の時に、検索表示したくない時に1=0を使う。
■WITH句(副問い合わせ(サブクエリ)に名前を付けれる機能。
一時テーブルみたいなもの)
https://zukucode.com/2017/09/sql-with.html
■SQLトリガー
https://qiita.com/wanko5296/items/fa3620c48196acbd3ab6
■シーケンス
https://qiita.com/5zm/items/da82cec73e097d2a97d0
例)SELECT setval('シーケンス名', (SELECT MAX(id) FROM 対象テーブル))
■SQLの「EXISTS」(存在判定/相関副問合せ)
「EXISTS」とは、先ほども言いましたが「サブクエリ」を扱う仕組みです。そしてそのサブクエリは「SELECT文で取得した情報を、他のSELECTやUPDATE処理で使用すること」を指します。
https://itsakura.com/sql-exists
■CASCADE: 親テーブルの行を削除または更新し、子テーブル内の一致する行を自動的に削除または更新します。
Laravelの外部キー制約でCASCADEを設定するときに使える新しいメソッド
■リストア:DBのデータを復元、修復、ダンプ:DBからデータを出力
→検証環境のDBをダンプして、ローカルのDBにリストアする
■DBのViewについて
SQLで利用されるビューは、「仮想テーブル」と考えてもらえば良いかと思います。
ユーザーが必要な部分だけを抜粋したり、各テーブルからユーザーがデータを参照しやすいように加工したビューを作成することが出来ます。
実体としてのデータは存在しませんが、ユーザーからはテーブル操作を行うのと同じ感覚で参照することが可能です。
→ビューの実体は「SELECT文」です。
https://style.potepan.com/articles/25504.html
■UNION(結果の結合:レコードの結合)
https://medium-company.com/sql-union/
■LEFT(文字列の切り取り)
https://sql55.com/t-sql/sql-server-built-in-string-function-1.php
■SQLでの変数名の使い方
http://www.code-magagine.com/?p=3092
■【MySQL】GROUP_CONCAT()を使ってみる
カラム名を文字列として、連結できる
https://www.softel.co.jp/blogs/tech/archives/3154
■MYSQLで「テキスト数字」を正しくソートできるようにする
https://office-obata.com/report/memorandum/post-5311/
■DBの実行履歴(実行中クエリの確認)
show processlist;
※kill プロセスID でクエリを強制終了できます。
https://www.wakuwakubank.com/posts/344-mysql-kill-query/
■INFULL関数
MySQLのIFNULL関数は、NULL値を他の文言に置き換えられる関数
https://style.potepan.com/articles/18643.html
SELECT IFNULL(カラム名, '置き換える値') FROM テーブル名;
■ROW_NUMBER関数
https://style.potepan.com/articles/23566.html#SQLROW_NUMBER
SELECT文の結果セットに対して、1〜の連番を振るための関数
ROW_NUMBER() OVER ( [ PARTITION BY [パーティションカラム], [パーティションカラム], ...] ORDER BY [ソートカラム], [ソートカラム], ... )
・パーティションカラム (PARTITION BY)
指定した場合は、結果セットをパーティションカラムで分割し、パーティション毎に1〜の連番を振ります。
パーティションカラムを指定しない場合、結果セット全体で1〜の連番を振ります。
・ソートカラム (ORDER BY)
パーティション内の行に連番を振る順序を指定します。ソートカラムの指定は必須で省略できません。
■CASE文
https://techplay.jp/column/1733
CASE 列名
WHEN 値1 THEN 結果1
WHEN 値2 THEN 結果2
...
ELSE デフォルト結果
END
■MySQL の LPAD() 関数の使い方
LPAD(文字列, 長さ, 埋める文字)
LPAD(@str, 10, '0')
■COALESCE関数
指定したカラムがNULLだった場合にNULL値を指定した別の値に置き換えてくれる関数
https://programmingnote.jp/archives/1434
SELECT
id
,name
,price
,COALESCE(quantity,0) AS quantity
FROM
purchase ;
◼️SQLチューニング
①駆動表を小さくする
②結合途中のデータの塊の範囲を小さくする(1回広げて条件を絞るのはNG)
③無駄な結合を省く
④インデックスが貼っている順にWhere、Order Byを指定
⑤検索インデックスがかかっていない箇所を見つけ対応
SQLで駆動表を小さくするためには、いくつかの方法があります。
1. 必要なカラムだけを選択する
必要なカラムだけを選択することで、駆動表のサイズを減らすことができます。不要なカラムを含めると、データ量が増え、パフォーマンスが低下します。
sql SELECT column1, column2 FROM table_name WHERE conditions;
2. WHERE句を使ってデータを絞り込む
WHERE句を使用して、必要なデータだけを抽出します。これにより、駆動表のサイズを減らすことができます。
SELECT column1, column2
FROM table_name
WHERE condition;
3. JOIN句を適切に使う
必要なデータを取得するために、JOIN句を適切に使用します。不要なテーブルを結合しないように気をつけます。
4. インデックスを使用する
インデックスを使用すると、クエリの実行速度が向上し、駆動表のサイズも減らすことができます。インデックスを作成する際には、頻繁にフィルタリングやソートに使用されるカラムに対してインデックスを設定します。
5. サブクエリを使う
サブクエリを使用して、一部のデータを事前にフィルタリングし、その結果をメインクエリで使用することで、駆動表のサイズを減らすことができます。
SELECT *
FROM (SELECT column1, column2 FROM table_name WHERE condition) subquery
WHERE additional_condition;
6. 結合の順序を最適化する
複数のテーブルを結合する際には、結合の順序を最適化することが重要です。一般的には、データ量が少ないテーブルを先に結合し、その後に大きなテーブルを結合することが推奨されます。
【Vscodeのプラグイン、設定】
■Trailing Spaces
テキスト内や文末にある、不要と思われる半角スペースに色をつけてくれる拡張機能です。
■空白文字(タブ、スペース)のエディター上での表示方法に関する設定
https://www.javadrive.jp/vscode/setting/index8.html
■タブキーを押したときにスペースに変換するのかに関する設定
https://www.javadrive.jp/vscode/setting/index9.html
■Better Comments(コメントをデコレーション)
■indent-rainbow(インデントの色付け)
■Japanese Language Pack for Visual Studio Code(Visual Studio Codeを日本語化する)
https://www.javadrive.jp/vscode/install/index4.html
■EvilInspector(テキスト内にある全角スペースを強調表示してくれる拡張機能)
■Git Graph(リポジトリのツリーをグラフィカルに表示)
■Todo Tree
■PHP Debug
※設定:【Laravel×Docker】XdebugでLaravelコンテナをデバッグ実行する方法
https://hiro8blog.com/how-to-debug-laravel-container-by-xdebug/#st-toc-h-6
■PHP Intelephense(PHPのコード補完やらコードチェック)
https://yama-itech.net/visual-studio-code-recommend-setting-php
■Laravel Extension Pack