1

ユーザーから入力された5つの異なる文字列で構成されるMySQLデータベースで検索クエリを作成したいと考えています。これらの文字列を使用して、5 つの異なるテーブル列をクエリしたいと考えています。

たとえば、次のような入力フィールドがある場合:

名、姓、住所、郵便番号、都市。

常にすべての行を取得するとは限らないデータベースにクエリを実行するにはどうすればよいですか。

私のクエリは次のようなものです:

SELECT user_id, username
from users
where
a like %?% AND
b like %?% AND
c like %?% AND
d like %?% AND
e like %?%;

AND を OR に交換すると、常に意味のあるすべての結果が得られ、AND を使用すると完全一致のみが得られます...

これに役立つ関数やステートメントはありますか?

編集

私が使用するコードは次のとおりです。

$sql = "select users.user_id, first_name
    from users
    inner join user_normal_aos
    on users.user_id = user_normal_aos.user_id
    inner join normal_areas_of_expertise
    on user_normal_aos.normal_areas_of_expertise_id = normal_areas_of_expertise.normal_areas_of_expertise_id
    where 
    users.first_name like ? AND
    users.kanzlei like ? AND
    normal_areas_of_expertise.normal_aoe like ? AND
    users.postcode like ? AND
    users.city like ?";

    $query = $this->db->query($sql,
        array(
            '%'.$lawyer_name.'%',
            '%'.$kanzlei.'%',
            '%'.$area_of_expertise.'%',
            '%'.$post_code.'%',
            '%'.$city.'%')
        );
4

1 に答える 1

0

たとえば、PHP を使用して、入力したフィールドに基づいてクエリを調整します。

$where = array();
$replacements = array();
/* you can also compare if string is not null or not empty...
   this is just example using isset */
if (isset($lawyer_name)) {
    $where[] = 'users.first_name like ?';
    $replacements[] = '%'.$lawyer_name.'%';
}

/* repeat this if again for all your fields .... */

$sql = "..... where ".implode(' AND ', $where);

$query = $this->db->query($sql,
    $replacements
);
于 2013-07-03T12:35:06.430 に答える