find_data

  find_data( string $table_name, array $table_schema, string $search_key[, array $columns][, array $order][, int $limit][, int $offset] )

テーブルから条件に該当するデータを探し出します。絞り込み条件に指定されたキーを部分的に含むデータをすべて取得します。
このメソッドは、引数として与えられたテーブルスキーマ情報より、検索キーワードが含まれると想定されるカラムのデータ型を自動選定して最適なデータを照会・取得することができます(内部処理的には自動選定された各カラムへのSELECT文をUNION句で連結したクエリが発行されます)。この場合、テーブル内の全フィールドを検索対象としないため、テーブルスキーマ情報を与えられなかった時よりもパフォーマンスが良いです。

パラメータ

$table_name

文字列としてデータを取得したいテーブル名 table_name を指定します。

$table_schema

テーブルスキーマ情報が格納された配列を指定します。テーブルスキーマ情報は get_table_schema() メソッドにて取得します。

$columns

検索対象となるカラム名の配列を指定します。この引数はSQLにおけるSELECT句となります。指定しなかった場合は全てのカラムを対象とするワイルドカードの文字列 “*” が指定されます。テーブル内のデータ数をカウントする時などは ”COUNT(*)” を指定します。

$conditions

検索対象となるデータの絞り込み条件の配列を指定します。この引数はSQLにおけるWHERE句となります。指定しなかった場合は絞り込みは行われません。またこのメソッドでの検索はLIKE条件による部分一致のみとなり、完全一致での絞り込みはサポートされません。完全一致でのデータ検索には get_data() メソッドを使ってください。定義配列はカラム名がキーで、検索値が値となります。

$order

検索対象データのソート順の配列を指定します。この引数はSQLにおけるORDER BY句となります。指定しなかった場合、検索対象データは登録日時のカラムcreatedにて降順にソートされてから検索されます。定義配列はカラム名をキーとして、値は降順(DESC)か昇順(ASC)のどちらかです。無効な文字列を指定すると降順となります。

$limit

検索対象データの最大取得行数を数値で指定します。検索対象データは conditions の条件で絞り込まれ、 order でソートされたデータとなります。この引数はSQLにおけるLIMIT句と同じ意味を持ちますが、開始位置と取得数を同時に指定することはできません(開始位置を指定する場合は後述の offset を使います)。また、0は指定できません。

$offset

検索対象データの取得開始行を数値で指定します。検索対象データは conditions の条件で絞り込まれ、 order でソートされたデータとなります。この引数はSQLにおけるOFFSET句と同じです。

返り値

array( [object(stdClass), ] )
テーブル検索結果のオブジェクト配列を返します。

変更履歴

バージョン 内容
1.0.0
1.1.5 order パラメータのデフォルト値処理を変更。 NULL を指定することでORDER BY句を生成しないようにした
1.1.9 order パラメータに指定されたカラム名がテーブル内に存在しない場合、ORDER BY句を生成しないようにした

使用例

<?php
global $cdbt;
$table_name = "prefix_tablename";
list($result, , $table_schema) = $cdbt->get_table_schema($table_name);
if ($result && !empty($table_schema)) {
    $data = $cdbt->find_data($table_name, $table_schema, array('account_name'), array('gender'=>'male'));
} else {
    $data = $cdbt->find_data($table_name, null, array('account_name'), array('gender'=>'male'));
}
$hits_account_list = [];
foreach ($data as $one_data) {
    $hits_account_list[] = $one_data->account_name;
}
printf("Number of account is %d.", count($male_account_list));