PHPプログラミング

ベストプラクティス

データベース SQLite

SQLite3でデータを取得:SELECT

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

SQLite3でテーブルに登録されているデータを取得する方法について解説。

目次

  1. #  データを取得する
  2. #  データを取得するSQLの基本について知る
  3. #  全データを取得
  4. #  条件を絞ってデータを取得
  5. #  データの並び順を指定
  6. #  取得するデータの件数を指定

データを取得する

今回は、テーブルへ登録されたデータを取得する方法について解説します。
次の順に、それぞれの方法をコードを交えながら進めていきます。

  • データを取得するSQLの基本について知る
  • 全データを取得
  • 条件を絞ってデータを取得
  • データの並び順を指定
  • 取得するデータの件数を指定

これから進めて行くにあたり、次のようなテーブルがあることを前提とします。

テーブル名:test
カラム名 その他
id INTEGER PRIMARY KEY
name TEXT NOT NULL
age INTEGER NOT NULL
created_datetime TIMESTAMP DEFAULT (datetime(CURRENT_TIMESTAMP,’localtime’))

こちらのテーブルには次のようなデータが登録されています。

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 データを取得するカラム名 FROM テーブル;

実際に上記のテーブルからデータを取得する時は、次のようなSQLとなります。

SELECT * FROM test;

SELECTの後ろの「*」は全カラムのデータを取得するという指定です。
よって、このSQLは「testテーブルから全てのデータを取得する」という内容になります。

データを取得するにあたって条件、データの並び順(ソート)、取得する件数を指定する場合は次のような形になります。

SELECT データを取得するカラム名 FROM テーブル WHERE 条件式 ORDER BY カラム名 並び順 LIMIT 取得したい件数;

実際のSQLは次のような形になります。

SELECT * FROM test WHERE id < 5 ORDER BY id DESC LIMIT 3;

こちらのSQLは「testテーブルから、idが5未満のデータに限り、idを降順となるように並び替えたうえで、先頭から3件のみ取得。」という内容になります。

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を使ったデータの取得方法でした。

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