PHP | MySQLのORDER BYのサンプルコード 複数カラム指定、昇順・降順、文字数でのソートなど

2022-10-09PHP MySQL,PHP

PHP | MySQLのORDER BYのサンプルコード 複数カラム指定、昇順・降順、文字数でのソートなど

PHPからMySQLのSELECT文やUPDATE文などを使う際に利用されるORDER BYの基本的な使い方、複数のカラムを指定する方法、昇順・降順のソート、文字数が多い順または少ない順でのソート方法など紹介しています。

サンプルに利用しているテーブルの中身は以下の通りです。

idenjavalue
1pineappleパイン500
2bananaバナナ300
3appleリンゴ200
orangeオレンジ100
peachモモ400

ORDER BYの基本的な記述サンプル

SELECT文でORDER BYを使うシンプルなサンプルコードです。

// クエリ
$sql = "select * from `table_name` ORDER BY en";
// クエリを実行
$res = $mysqli->query($sql);

//apple banana orange peach pineapple

英語の名前順になっている事が確認できます。

DESCで逆順(降順)でソートする

ORDER BYにDESCを指定して逆順(降順)にするサンプルコードです。

// クエリ
$sql = "SELECT  * FROM `table_name` ORDER BY en DESC";
// クエリを実行
$res = $mysqli->query($sql);

while ($dat = $res->fetch_assoc()) {
	echo $dat['en'] . ' ';
}

//pineapple peach orange banana apple

英語の名前順で逆順になっている事が確認できます。

ORDER BYで複数のカラムを指定する

ORDER BYで複数のカラムを指定する場合はカンマ区切りでカラム名を記述していきます。

// クエリ
$sql = "SELECT * FROM `table_name` ORDER BY en, value";
// クエリを実行
$res = $mysqli->query($sql);

while ($dat = $res->fetch_assoc()) {
	echo $dat['en'] . ' ';
}

//apple(200) banana(300) orange(100) peach(500) pineapple(500)

データが悪くて、結果からソートが正常なのか良くわかりません。

ORDER BYで複数のカラム指定に昇順・降順を指定する

ORDER BYで複数のカラムを指定する際にDESCで昇順・降順ソートを使うには、個別にASCまたはDESCを指定します。

// クエリ
$sql = "SELECT * FROM `table_name` ORDER BY en DESC, value";
// クエリを実行
$res = $mysqli->query($sql);

while ($dat = $res->fetch_assoc()) {
	echo $dat['en'] . ' ';
}

//pineapple(500) peach(500) orange(100) banana(300) apple(200)

昇順と降順を混在させる。

// クエリ
$sql = "SELECT * FROM `table_name` ORDER BY en DESC, value";
// クエリを実行
$res = $mysqli->query($sql);

while ($dat = $res->fetch_assoc()) {
	echo $dat['en'] . ' ';
}

//apple(200) banana(300) orange(100) peach(500) pineapple(500)

データが悪くて、結果からソートが正常なのか良くわかりません。

CHAR_LENGTH()で文字数の少ない・多い順にソートする

CHAR_LENGTH()関数を使って、対象カラムのデータを文字数の少ない順、または多い順でソートする事が可能です。

// クエリ
$sql = "SELECT * FROM `table_name` ORDER BY CHAR_LENGTH(`en`)";
// クエリを実行
$res = $mysqli->query($sql);

while ($dat = $res->fetch_assoc()) {
	echo $dat['en'] . ' ';
}

//apple peach banana orange pineapple

CHAR_LENGTH()にDESCを指定すると文字数が多い順にソートされます。

// クエリ
$sql = "SELECT * FROM `table_name` ORDER BY CHAR_LENGTH(`en`) DESC";
// クエリを実行
$res = $mysqli->query($sql);

while ($dat = $res->fetch_assoc()) {
	echo $dat['en'] . ' ';
}

//pineapple banana orange apple peach

PHP MySQL,PHP

Posted by Yousuke.U