【MySQL】PHPのstrposをSQLでやる

MySQLのLOCATE関数でPHPのstrpos関数と同様のことができます。

このSQLの答えは5が返ってきます。

PHPのstrposと異なるのは、
1文字目がヒットした場合は0ではなく1を返します。
存在しなかった場合は0が返ってきます。

私がよく使うパターンとしては
データの中にキーワードが含まれるかどうかの判定ですね。

【Linux】各種バージョンを調べる

調べ方も様々なのでつい忘れてしまいますよね。

CentOSのバージョン

Apacheのバージョン

MySQLのバージョン

PHPのバージョン

【MySQL】SQLでIF文(CASE)を使う

SQLで条件によって返す値を変えたいとき、
NULLのときはIFNULLで簡単ですが、

IF文のような条件分岐をさせたいときには、CASE文を使います。

【MySQL】テーブルにカラムを追加する

MySQLでテーブルにカラムを後から追加するときの書式をすぐ忘れるのでメモ。

テーブルの末尾に追加

テーブルの指定したカラムの後ろに追加

例:

【MySQL】複数行の結果を一行にまとめて返す

MySQLで複数行の結果を1行にまとめるにはGROUP_CONCAT関数を使用します。

SEPARATORで区切られた文字列で返ってきます。

どんなときに使うかというと、
たとえば
・USERテーブルにユーザー情報
・ADDRESSテーブルに住所情報
が入っていたとして、各ユーザーは住所が複数登録されている可能性があるとします。
(大手ECサイトでユーザーが住所を複数登録できるというようなイメージです。)
このとき
「全ユーザーの全住所を取得して、ユーザーごとにまとめて表示したい」
となったとき、3つの方法があります。

・SQLでUSERを取得し、USERの1件ずつに対して、またSQLでADDRESSを取得する。
・SQLでサブクエリーを使って全USERの全ADDRESSを取得して、プログラム側でUSERごとにまとめる
・SQLでGROUP_CONCATを使ってUSERごとにADDRESSをまとめた状態で取得する

3番目が一番スマートに取得できますよね。
ただし、SQLがあまり複雑になるとパフォーマンスが低下する場合がありますので、
プログラム側でやったほうがよいケースもあります。