レシピ

データベース MySQL

mysqliのSELECT文を使った様々なデータの取得方法

  • このエントリーをはてなブックマークに追加

SQLのSELECT文について、様々なデータの取得方法を解説します。

この記事のポイント

  • SQLで取得するデータの条件を指定する
  • 取得するデータの並びを取得する

目次

必要なデータを、必要な順に、必要な数だけ取得する

SQLのSELECT文は条件式の書き方次第で、必要なデータに絞った取得が可能です。

今回は次のようなデータベースがあることを想定して、様々な形式でデータを取得していきます。

テーブル名:gc_granola
id name price better_beforetime modify_datetime create_datetime
1 野菜グラノーラ 300 2017-01-15 2016-10-04 00:00:00 2014-04-10 00:00:00
2 果物グラノーラ 300 2017-01-15 2016-10-02 00:00:00 2014-04-10 00:00:00
3 穀物グラノーラ 300 2017-02-10 2016-10-01 00:00:00 2014-04-10 00:00:00
4 オーガニックグラノーラ 750 2016-12-05 2016-09-20 00:00:00 2015-08-07 00:00:00
5 レーズングラノーラ 400 2017-02-10 2016-09-03 00:00:00 2012-10-05 00:00:00
6 プレーンシリアル 280 2017-03-10 2016-09-18 00:00:00 2012-04-20 00:00:00
7 チョコシリアル 350 2017-03-10 2016-09-18 00:00:00 2012-04-20 00:00:00
8 ハニーシリアル 300 2017-02-22 2016-10-01 00:00:00 2012-05-10 00:00:00
9 シュガーシリアル 300 2017-03-10 2016-09-10 00:00:00 2012-04-20 00:00:00
10 アップルグラノーラ 350 2017-02-10 2016-09-24 00:00:00 2012-05-15 00:00:00
11 パイングラノーラ 350 2017-02-10 2016-09-24 00:00:00 2012-05-15 00:00:00

mysqliについては「オブジェクト型」と「手続き型」の2通りの記述方法がありますが、今回は主に「オブジェクト型」で進めていきます。
「手続き型」でも全く同じSQL文を使うことができます。
SELECT文の基本的な扱い方については、「mysqliでデータを取得(SELECT)」を参照ください。

値が等しいデータのみを取得

指定した値と等しいデータを持つもののみを取得します。
今回はカラム「id」を使って、値に「8」を持つデータを取得するコードです。

コード例

$mysqli = new mysqli( 'host_name', 'user_name', 'password', 'database_name');

if( $mysqli->connect_errno ) {
	echo $mysqli->connect_errno . ' : ' . $mysqli->connect_error;
}

$mysqli->set_charset('utf8');

$sql = "SELECT * FROM gc_granola WHERE id = 8";
$res = $mysqli->query($sql);

if( $res ) {
	var_dump($res->fetch_object());
}
$mysqli->close();

実行結果

実行結果

解説

条件式はWHERE句の後ろに記述します。
今回はシンプルに値が等しいかをチェックしているので、id = 8という式になります。

特定の範囲の値を持つデータを取得

ある特定の範囲の値を持ったデータを取得したい場合には、次のように「BETWEEN」での絞り込みが便利です。

コード例

$mysqli = new mysqli( 'host_name', 'user_name', 'password', 'database_name');

if( $mysqli->connect_errno ) {
	echo $mysqli->connect_errno . ' : ' . $mysqli->connect_error;
}

$mysqli->set_charset('utf8');

$sql = "SELECT * FROM gc_granola WHERE price BETWEEN 350 AND 400";
$res = $mysqli->query($sql);

if( $res ) {
	var_dump($res->fetch_all());
}
$mysqli->close();

実行結果

実行結果

解説

今回は「価格」が350円〜400円の商品データを取得する条件式になっています。
「カラム名 BETWEEN 値1 AND 値2」とすることで、「値1〜値2」の間で絞り込みを行うことができます。

日付で条件式を指定する

特定期間の日付でデータを絞り込みたい場合は、次のような条件式となります。

コード例

$mysqli = new mysqli( 'host_name', 'user_name', 'password', 'database_name');

if( $mysqli->connect_errno ) {
	echo $mysqli->connect_errno . ' : ' . $mysqli->connect_error;
}

$mysqli->set_charset('utf8');

$sql = "SELECT * FROM gc_granola WHERE '2017-01-01' <= better_before AND better_before <= '2017-01-31'";
$res = $mysqli->query($sql);

if( $res ) {
	var_dump($res->fetch_all());
}
$mysqli->close();

実行結果

実行結果

解説

今回はカラム「better_before(賞味期限)」について、2017年1月のもので絞り込むような条件式を指定しています。
このように、「AND」を使うことで2つ以上の条件式を掛け合わせることが可能です。

OR」を使って「または」の条件式を指定することも可能です。
例えば、「300円未満、または500円以上」の商品データで絞り込みたい場合は「price < 300 OR 500 <= price」のようになります。

データの並び順を指定する

次に、データの並び順を指定する方法をみていきます。

「価格の高い順」や「最近更新された順」など、一定のルールに基づいた順番にデータが並んでいると、その後の処理がスムーズになる場合があります。
データの並び順については「ORDER BY句」で指定します。

コード例

$mysqli = new mysqli( 'host_name', 'user_name', 'password', 'database_name');

if( $mysqli->connect_errno ) {
	echo $mysqli->connect_errno . ' : ' . $mysqli->connect_error;
}

$mysqli->set_charset('utf8');

$sql = "SELECT * FROM gc_granola WHERE '2016-10-01' <= modify_datetime ORDER BY modify_datetime";
$res = $mysqli->query($sql);

if( $res ) {
	var_dump($res->fetch_all());
}
$mysqli->close();

実行結果

青枠の部分がORDER BY句で並び替えを行なった「更新日」です。

実行結果

解説

今回はカラム「modify_datetime(更新日)」を使って、WHERE句で2016年10月1日以降に更新されたもので絞り込みを行なったうえで、ORDER BY句で日付を昇順(日付の古い順)に並び替えています。
昇順は「ORDER BY modify_datetime ASC」と書くことも可能ですが、ASCは省略可能です。

もし逆に、更新日が新しい順に並び替えたい場合は「ORDER BY modify_datetime DESC」と指定します。

もちろん日付以外でも並び替え可能です。
例えば「価格を高い順」で並び替えたい場合は「ORDER BY price DESC」となりますし、「安い順」であれば「ORDER BY price ASC(ASCは省略可)」となります。

データの取得件数を指定

該当するデータを全て取得するのみではなく、取得するデータの数を指定することが可能です。
そのときは「LIMIT句」を指定します。

コード例

$mysqli = new mysqli( 'host_name', 'user_name', 'password', 'database_name');

if( $mysqli->connect_errno ) {
	echo $mysqli->connect_errno . ' : ' . $mysqli->connect_error;
}

$mysqli->set_charset('utf8');

$sql = "SELECT * FROM gc_granola LIMIT 3";
$res = $mysqli->query($sql);

if( $res ) {
	var_dump($res->fetch_all());
}
$mysqli->close();

実行結果

実行結果

解説

今回はデータを3件取得する指定を行なっています。もし10件取得したい場合は「LIMIT 10」、20件の場合は「LIMIT 20」となります。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

ありがとうございます。
コメントを送信しました。

  • このエントリーをはてなブックマークに追加
前のページへ 一覧ページへ一覧 次のページへ