これは簡単な作業のようですが、私はこのために欲しい解決策を見つけるのは難しいです。私はclunky以外の何かを考え出す何かを見つけることができません。ここに私が働いているもの:投稿された変数に基づいてMySQLクエリを構築する
処理スクリプトに変数を投稿する検索フォームがあります。これらの変数は、照会されるデータのフィルターです。ユーザーの権限によっては、アクセスするフィルタによっては、変数が多少入ってくることがあります。各フィルタは、基本的に結果が出てくるテーブル内のフィールドを参照します。各フィルタの1つのオプションは "ANY"であるため、WHERE句は必要ありません。
クエリ文字列を作成するにはどうすればよいですか。たとえば、$ firstname、$ lastname、$ age、$ dobの4つの変数が返ってきたとします。しかし、$ ageと$ dobでフィルタリングするアクセス権を持っているのは、一部のユーザだけです。
$query = "SELECT * FROM people";
if(($firstname != 'ANY' && !empty($firstname)) ||
($lastname != 'ANY' && !empty($lastname)) ||
($age != 'ANY' && !empty($age)) ||
($dob != 'ANY' && !empty($dob))) {
$query .= " WHERE";
}
if($firstname != 'ANY' && !empty($firstname)) {
$query .= " firstname='$firstname'";
}
if($lastname != 'ANY' && !empty($lastname)) {
if($firstname != 'ANY' || !empty($firstname)) {
$query .= " AND";
}
$query .= " lastname='$lastname'";
}
...
など。しかし、それはちょうど私にはダム、恐ろしい、とばかげて非効率的に見えます。私は若干変更されたMVCパターンを使用しているので、可能な各フィルタの検索モデルでメソッドを構築するのは理にかなっていますか?あなたはこの拡張でき
あなたが行っている可能性がありますが、スペースが足りなくなるという副言として、*を使用するのではなくフィールドを指定してください。 –