PHP | MySQLのSELECT文で近い値のデータでソートして取得する

PHP MySQL,PHP

PHP | MySQLのSELECT文で近い値のデータでソートして取得する

PHPのMySQLで、SELECT文とORDER BY ABS()を使って指定した値と近い値順のデータでソートして取得する方法を紹介しています。

確認環境

エックスサーバー
PHP 8.016

SELECT文で近い値のデータでソートして取得する

MySQLのSELECT文で近い値のデータでソートして取得するにはORDER BY ABS()を利用する事が可能です。

このページのサンプルコードは以下のテーブルを例にしています。

idnamevalue
0Apple100
1Melon200
2Banana300
3Orange150
4Grape350
サンプルで利用しているテーブル

数値が近い順にデータを取得する場合

例えば、id「3」に近い順でデータを取得する場合、ORDER BY ABS(id - 3)と指定します。

// クエリ
$sql = "select * from `table_name` WHERE `column_name` ORDER BY ABS(id - 3) ";

// クエリを実行
$res = $mysqli->query($sql);
if (!$res) {
	error_log($mysqli->error);
	exit;
}

上記コードの場合、id「3」の「Orange」から「2」の「Banana」、「4」の「Grape」、「1」の「Melon」、最後に一番遠い「0」の「Apple」の順でデータを取得します。

「2」と「4」の近さは同じになりますが、その場合、元のソート状態によって順序が決まります。
例えば、ORDER BY DESCが指定されている場合は「4」を先に取得します。

最初の文字が近い順にデータを取得する場合

ORDER BY ABS()が機能するのは数値のみで文字列に対して利用する事はできません。

文字列の場合、ORDER BY カラム名でソートを使ったり、WHRERE文で必要な頭文字を先頭一致させつつ取得していく事で実装可能です。

PHP MySQL,PHP

Posted by Yousuke.U