データベースからの検索

トップ > PHP入門 > データベースからの検索

目次

広告

検索条件を指定する

データベースを操作する命令で使用することが多いのは、データ表示用の命令です。検索を効率よく行うためにさまざまな命令が用意されており、これらを組み合わせてデータの抽出を行います。

検索条件を絞り込むには、WHERE を使用します。=>>=<<=<> で比較条件を指定する事ができます。

演算子 意味
= 等しい
> 右辺より大きい
>= 右辺以上
< 右辺より小さい
<= 右辺以下
<> (もしくは != 等しくない

書式は SELECT 表示するカラム FROM テーブル名 WHERE 検索条件 となります。

SELECT * FROM address WHERE no = 10;
SELECT * FROM address WHERE no >= 7;
SELECT * FROM address WHERE name = '山田太郎';

ANDOR で検索条件を複数指定することができます。

SELECT * FROM address WHERE no = 10 OR no = 12;
SELECT * FROM address WHERE name = 'ヤマダタロウ' AND tel = '090-1234-5678';

あいまい検索をする

部分的な文字列を検索条件に指定する場合、LIKE を使用します。LIKE は、英語で「~のような」という意味です。書式は SELECT 表示するカラム FROM テーブル名 WHERE 検索対象のカラム名 LIKE '検索文字列' となります。

検索文字列にはワイルドカードを指定する事ができ、例えば以下のようにすると、名前が「山」で始まるデータ、「郎」で終わるデータ、「太郎」を含むデータがそれぞれ表示されます。% は「何か文字が入るかもしれないし、入らないかもしれない」という意味になります。

SELECT * FROM address WHERE name LIKE '山%';
SELECT * FROM address WHERE name LIKE '%郎';
SELECT * FROM address WHERE name LIKE '%太郎%';

並び替えて表示する

データベースからデータを表示する際、ORDER BY を使用すれば表示順を指定する事ができます。書式は SELECT 表示するカラム FROM テーブル名 ORDER BY 並び替え対象のカラム名 となります。以下のようにすると、名前の順に表示させる事ができます。ただし、読み仮名順ではなく文字コード順に表示されます。

SELECT * FROM address ORDER BY name;

並び替え対象は , で区切って複数指定することができます。以下のようにすると「番号が同じものがあれば、それらをさらに名前で並べる」という意味になります。

SELECT * FROM address ORDER BY no, name;

また、ORDER BY で指定したカラム名の末尾に DESC を追加すると、降順に並び替える事ができます。

SELECT * FROM address ORDER BY no DESC;

表示件数を制限する

データベースへの登録件数が多くなると、データの表示に時間がかかってしまいます。また、検索結果が1,000件あった場合にすべて表示すると、非常に見づらくなります。

そんな場合は LIMIT を使用すれば、一度に表示する件数を制限する事ができます。書式は SELECT 表示するカラム FROM テーブル名 LIMIT 表示件数 となります。以下のようにすると、検索結果の最初のレコードから10件目までを表示する事ができます。

SELECT * FROM address LIMIT 10;

以下のようにすると、途中の5件目から10件分のみを表示する事ができます。(表示開始位置は0を起点として数えます。

SELECT * FROM address LIMIT 4, 10;

範囲を指定して検索する

BETWEEN を使用すると、指定した範囲に含まれるものを抽出する事ができます。以下のようにすると、番号が5~9のデータを表示することができます。

SELECT * FROM address WHERE no BETWEEN 5 AND 9;

以下のようにすると、連続していない値を指定する事ができます。この場合、番号が2のデータと4のデータと6のデータが表示されます。

SELECT * FROM address WHERE no IN(2, 4, 6);

組み合わせて指定する

これらの指定は、複数組み合わせて指定することができます。例えば、以下のようにすれば「名前に'太郎'を含むデータを名前順に10件表示」という条件なります。

SELECT * FROM address WHERE name LIKE '%太郎%' ORDER BY name LIMIT 10;

なお、これらの指定は「検索条件 → 並び替え → 表示件数」の順に指定します。