【初心者向け】sql selectを使ってソートする方法

こんにちは、

炭酸水を飲むことにはまっているサトウです。

さて、本題に入りたいと思います。

phpの学習を進めていくとデータベースの情報を「ソートする機能」を実装したいと思う方も多いのではないでしょうか。SQLではselect文を使って情報をソートすることが可能ですが、理解できない方も少なくないのでは、、、。と思い、今回は「select」を使ったソート方法について分かりやすく説明していきます。

phpやSQLを学び始めた方や、「select」「selectを使ったソート方法」について分からない方は、是非読んでみてくださいね。

select文の書き方

まずはSQLの基本的な書き方を解説していきます。

select文の基本的な書き方

データベースのテーブルから情報を検索するには「select」を使用します。

SELECT カラム名 FROM テーブル名 WHERE(検索条件があれば)

例えば「users」テーブルから「idが84」の「user_name」レコードを抽出したい時は以下のSQL文になります。

 

実際にMySQL上で確認してみましょう。

テーブル情報(SQL実行前)

この状態で以下を実行します。

 

実行結果

idが84の「テスト84」というユーザーだけ抽出できましたね。
これがselect文の基本的な書き方になります。

並び順を指定する:order by

ここからはソートする時に使用するSQLの書き方について解説していきます。
並び順を指定する時には「order by」を使用します。

並び順は昇順・降順も指定することができます。

・ASC・・・昇順
・DESC・・・降順

以下の「product」というテーブルを例に説明します。

画面イメージ(productテーブル)

「name」や「category_code」といったカラム情報がバラバラに登録されているテーブルです。
この状態で「category_code」が小さい順に並び替えたい時のSQL文は以下のように書きます。

SQL文

SELECT * FROM product ORDER BY category_code ASC

画面イメージ(SQL実行後)

category_codeが昇順(カテゴリーコードの数字の少ない順)に並び替えられているのが確認できますね。

降順並び替えたい時も同様に記載します。

(例)priceカラムを降順(高い順)に並び替えたい場合

SELECT * FROM product ORDER BY price DESC

画面イメージ(SQL実行後)

priceカラムが降順(値段が高い順)に並び替わりましたね。

selectを使ってソート機能を実装してみよう!

ここからはselect文を使って、画面上からもソートできる機能を実装しながら解説していきます。

画面イメージ(完成後)

※今回はソートしたデータベースを画面表示するシンプルな実装内容にしています。
「検索する」「ボタンを押したらコンテンツが並び替わる」といった内容は含んでいないため、
興味がある方は是非調べながら記事の内容を改良して試してみてください。

サンプルコード(完成後)

処理の流れ

(1)try-catchを使ってDBへの接続準備
(2)pdoオブジェクトでDB接続
(3)SQL文「product」テーブルの「name」カラムを検索し、昇順で並び替える
(4)queryメソッドを使ってSQLの実行
(5)fetchメソッドを呼び出してクエリの実行結果を取得する
(6)$resultの中身をforeachで展開する

※(3)がselectを使ったSQL文を書いている箇所です

try-catchを使ってDBへの接続準備

まずはtry-catch(例外処理)を使ってデータベースへの接続準備をします。例としてmysql_testというデータベースを使用します。

サンプルコード(該当部分)

 

pdoオブジェクトでDB接続

PDOオブジェクトでデータベース接続するため、(1)で使用した情報を引数として使用します。

サンプルコード(該当部分)

 

SQL文「product」テーブルの「name」カラムを検索し、昇順で並び替える

ここでSELECT ORDER BYを使います。今回は「product」テーブルの「name」カラムを昇順で並べ替えます。

サンプルコード(該当部分)

 

queryメソッドを使ってSQLの実行

SQLを実行するためにqueryメソッドを使用します。引数に(3)で記載したSQL文を使用します。

サンプルコード(該当部分)

 

fetchメソッドを呼び出してクエリの実行結果を取得する

fetchAllを使って、クエリの結果を連想配列の形式で取得します。
今回はnameカラム以外の情報は使用しないため一次元配列で情報取得可能なPDO::FETCH_COLUMNと書きます。

サンプルコード(該当部分)

 

$resultの中身をforeachで展開する

クエリの実行結果が入っている$resultをforeachで展開します。
foreachは以下のように書くと中身を展開(表示していく)ことが可能です。

foreach(変数名 as $key => $value){
必要な処理を記載
}

今回の処理はプルダウン形式で表示します。そのため、foreachで展開した値($value)を<option>タグを使って挟みます。

サンプルコード

 

まとめ

いかがでしたか?今回は、SQLのselectを使ってソートする方法について説明しました。

プログラミングを学び始めた頃は、「selectを使ったソート方法」について難しく感じることあると思います。ですがまずはデータの少ない情報からSQL文を書いていけば、簡単に使えることができる日が来ると思うので、焦らずにゆっくりと理解を深めていってくださいね

この記事が、phpの学習に役立つと嬉しいです。