レシピ
データベース SQLite
SQLite3でデータを取得:SELECT
SQLite3でテーブルに登録されているデータを取得する方法について解説。
この記事のポイント
- データを取得するSQLを知る
- SQLIteデータベースに登録された全データを取得する
- ある条件を満たすデータのみ取得する
- 取得するデータの並び順を指定する
目次
データを取得する
今回は、テーブルへ登録されたデータを取得する方法について解説します。
次の順に、それぞれの方法をコード例を交えながら進めていきます。
- データを取得するSQLの基本について知る
- 全データを取得
- 条件を絞ってデータを取得
- データの並び順を指定
- 取得するデータの件数を指定
これから進めて行くにあたり、次のようなテーブルがあることを前提とします。
カラム名 | 型 | その他 |
---|---|---|
id | INTEGER | PRIMARY KEY |
name | TEXT | NOT NULL |
age | INTEGER | NOT NULL |
created_datetime | TIMESTAMP | DEFAULT (datetime(CURRENT_TIMESTAMP,’localtime’)) |
こちらのテーブルには次のようなデータが登録されています。
testテーブルに登録されているデータ
1|新井|28|2017-07-6 10:00:00
2|吉田|24|2017-07-15 11:00:00
3|田辺|27|2017-07-16 11:00:00
4|渡辺|23|2017-07-16 14:00:00
5|佐々木|30|2017-07-18 14:00:00
6|森田|22|2017-07-08 10:30:00
7|宇野|37|2017-07-19 10:00:00
8|大野|33|2017-07-19 16:20:00
9|石田|23|2017-07-08 22:00:00
10|西川|31|2017-07-07 11:00:00
データを取得するSQLの基本について知る
まずはデータを取得するSQLであるSELECT文について、基本的な形を紹介します。
SQL自体は他のデータベースと共通なので、他のデータベースを使ったことがある場合はお馴染みかもしれません。
基本的なSELECT文のコード例
SELECT データを取得するカラム名 FROM テーブル;
実際に上記の「testテーブル」からデータを取得する場合は、次のようなSQLになります。
testテーブルからデータを取得するコード例
SELECT * FROM test;
SELECTの後ろの「*」は全カラムのデータを取得するという指定です。
よって、このSQLは「testテーブルから全てのデータを取得する」という内容になります。
もしデータを取得するにあたっての条件、データの並び順(ソート)、取得する件数を指定したい場合は次のような形になります。
データの様々な取得条件を指定するコード例
SELECT データを取得するカラム名 FROM テーブル WHERE 条件式 ORDER BY カラム名 並び順 LIMIT 取得したい件数;
実際のケースに当てはめてみると、次のようなSQLになります。
testテーブルからデータを取得するコード例
SELECT * FROM test WHERE id < 5 ORDER BY id DESC LIMIT 3;
このSQLは「testテーブルからidが5未満のデータに限り(WHERE句)、idを降順に並び替えて(ORDER BY句)、先頭から3件のみ取得(LIMIT句)。」という内容になります。
SQLの基本形を確認したところで、実際にSQLを使ってデータを取得してみましょう。
全データを取得
まずは、testテーブルから全てのデータを取得するシンプルなSQLを実行してみましょう。
コード例
<?php
// Initialize
$db = null;
$sql = null;
$res = null;
// データベースへ接続
$db = new SQLite3("./sqlite/test.sqlite3");
// データの取得
$sql = 'SELECT * FROM test';
$res = $db->query($sql);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>SQLite テスト</title>
</head>
<body>
<?php
while( $row = $res->fetchArray() ) {
echo '<p>' . var_dump($row) . '</p>';
}
?>
</body>
</html>
上記のコードを実行すると、テーブルに登録されている全データが出力されます。
出力例
array (size=8)
0 => int 1
'id' => int 1
1 => string '新井' (length=6)
'name' => string '新井' (length=6)
2 => int 28
'age' => int 28
3 => string '2017-07-6 10:00:00' (length=18)
'created_datetime' => string '2017-07-6 10:00:00' (length=18)
array (size=8)
0 => int 2
'id' => int 2
1 => string '吉田' (length=6)
'name' => string '吉田' (length=6)
2 => int 24
'age' => int 24
3 => string '2017-07-15 11:00:00' (length=19)
'created_datetime' => string '2017-07-15 11:00:00' (length=19)
... 同様に残りのデータも出力される ...
idを昇順にして全データが出力されます。
SQLでデータの取得条件を指定していないのでシンプルです。
データの出力はwhile文の中で行っています。
$resへデータが入っているので、fetchArray関数を使って$resから1件ずつデータを取得し、全てのデータを出力したらループを出るという指定です。
fetchArray関数は配列形式でデータを引き出します。
配列のキーは「数値」と「カラム名」の2パターンで取得することができるので、どちらを使ってもデータにアクセス可能です。
条件を絞ってデータを取得
続いて、取得するデータの条件を指定してみましょう。
先ほどのSQLにWHERE句を追加してください。
コード例
// データの取得
$sql = 'SELECT * FROM test WHERE id < 5';
このSQLを実行すると、idが「5未満」のデータのみ取得することができます。
取得できるデータ
1|新井|28|2017-07-6 10:00:00
2|吉田|24|2017-07-15 11:00:00
3|田辺|27|2017-07-16 11:00:00
4|渡辺|23|2017-07-16 14:00:00
同様に、「30歳以上の人のみ取得(WHERE 30 <= age)」としたり、
「2017年7月16日以降に登録したデータのみ取得(WHERE ‘2017-07-16 00:00:00’ <=
created_datetime)」といった条件指定が可能です。
データの並び順を指定
続いて、ORDER BY句を使ってデータの並び順を指定します。
SQLでデータの並び替えを行うと、PHPでソートする必要がなくなるため非常に便利です。
先ほどのSQLに、次のようにORDER BY句を追加してください。
コード例
// データの取得
$sql = 'SELECT * FROM test WHERE id < 5 ORDER BY id DESC';
取得できるデータ
4|渡辺|23|2017-07-16 14:00:00
3|田辺|27|2017-07-16 11:00:00
2|吉田|24|2017-07-15 11:00:00
1|新井|28|2017-07-6 10:00:00
今回はデータを並び替えるにあたり、カラム「id」を基準となるように指定しています。
さらに、その後ろで「DESC」を指定しているので、データは「降順」となります。
「ASC」を指定するか、何も指定しない場合は「昇順」となります。
もちろん「id」以外のカラムを指定することも可能です。
また、並び替えの基準とするカラム名は複数指定することもできます。
取得するデータの件数を指定
最後に、LIMIT句を使ってデータの取得数を指定します。
先ほどのSQLに、次のようにLIMIT句を追加してください。
コード例
// データの取得
$sql = 'SELECT * FROM test WHERE id < 5 ORDER BY id DESC LIMIT 2';
取得できるデータ
4|渡辺|23|2017-07-16 14:00:00
3|田辺|27|2017-07-16 11:00:00
今回はLIMIT句の後ろに「2」を指定しているので、「最大2件まで取得する」という指定になります。
以上、SQLite3を使ったデータの取得方法でした。
こちらの記事は役に立ちましたか?
コメントありがとうございます!
運営の参考にさせていただきます。
ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。