問題が、ユーザーがどの基準を選択するかわからないが、「空白」の基準の結果を返したいということである場合は、次を使用できます。
$criteria_1 = $_POST['criteria_1'];
$criteria_2 = $_POST['criteria_2'];
$criteria_3 = $_POST['criteria_3'];
if(!$criteria_1 && !$criteria_2 && !$criteria_1) {
echo "You must select at least one criteria!";
} else {
// Run query mentioned below and return results.
}
クエリは次のようになります。
SELECT * from mytable
WHERE
(criteria1 = '$criteria_1' OR '$criteria_1' = '') AND
(criteria2 = '$criteria_2' OR '$criteria_2' = '') AND
(criteria3 = '$criteria_3' OR '$criteria_3' = '')
これにより、空白の (選択されていない) パラメータは空白として扱われ、無視されます。上記では、条件が指定されていない場合、すべての結果が返されることに注意してください。
上記の別の書き方は次のとおりです。
SELECT * from mytable
WHERE
criteria1 IN ('$criteria_1', '') AND
criteria2 IN ('$criteria_2', '') AND
criteria3 IN ('$criteria_3', '')
繰り返しますが、すべての基準 1 の結果を返すためにエントリをまったく許可しません。