レシピ
データベース MySQL / MariaDB
mysqliのSELECT文を使った様々なデータの取得方法
SQLのSELECT文について、様々なデータの取得方法を解説します。
この記事のポイント
- SQLで取得するデータの条件を指定する
- 取得するデータの並びを取得する
目次
必要なデータを、必要な順に、必要な数だけ取得する
SQLのSELECT文は条件式の書き方次第で、必要なデータに絞った取得が可能です。
今回は次のようなデータベースがあることを想定して、様々な形式でデータを取得していきます。
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」となります。
こちらの記事は役に立ちましたか?
コメントありがとうございます!
運営の参考にさせていただきます。
ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。