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

PHP,PHP MySQL

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 `fruits` ORDER BY en";
$res = $mysqli->query($sql);

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

//apple banana orange peach pineapple

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

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

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

$sql = "select * from `fruits` 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 `fruits` 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 `fruits` 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 `fruits` 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 `fruits` 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 `fruits` ORDER BY CHAR_LENGTH(`en`) DESC";
$res = $mysqli->query($sql);

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

//pineapple banana orange apple peach

PHP,PHP MySQL

Posted by Yousuke.U