PHP | MySQLのSELECT文で近い値のデータでソートして取得する
![PHP | MySQLのSELECT文で近い値のデータでソートして取得する](https://1-notes.com/wp-content/uploads/2023/02/php.png)
PHPのMySQLで、SELECT文とORDER BY ABS()
を使って指定した値と近い値順のデータでソートして取得する方法を紹介しています。
確認環境
エックスサーバー
PHP 8.016
SELECT文で近い値のデータでソートして取得する
MySQLのSELECT文で近い値のデータでソートして取得するにはORDER BY ABS()
を利用する事が可能です。
このページのサンプルコードは以下のテーブルを例にしています。
id | name | value |
---|---|---|
0 | Apple | 100 |
1 | Melon | 200 |
2 | Banana | 300 |
3 | Orange | 150 |
4 | Grape | 350 |
数値が近い順にデータを取得する場合
例えば、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文で必要な頭文字を先頭一致させつつ取得していく事で実装可能です。
ディスカッション
コメント一覧
まだ、コメントがありません