ここのすべての記事を読んだと思いますが、それでもコードを 100% 動作させることはできません。私は、ユーザーが 4 つの場所のいずれかに基づいて検索を実行したり、完全にスキップしたりできる PHP フォームです。その場合、「where location」句をスキップして次のパラメーター グループに移動する必要があります。私のmysqlストアドプロシージャは次のようになります。
CREATE PROCEDURE search(
IN inRoomsPerPage INT,
IN inStartItem INT,
IN inAddDate INT,
IN inLocation1 ENUM('T','F'),
IN inLocation2 ENUM('T','F'),
IN inLocation3 ENUM('T','F'),
IN inLocation4 ENUM('T','F')
)
BEGIN
SELECT *
FROM useradds as ua
INNER JOIN household as hh on hh.idx_user_id = ua.idx_user_id
INNER JOIN house as h on h.idx_user_id = ua.idx_user_id
WHERE adddate >= (CURDATE() - INTERVAL inAddDate DAY) AND
((inLocation1 IS NULL OR downtown = inLocation1) OR
(inLocation2 IS NULL OR hwy = inLocation2) OR
(inLocation3 IS NULL OR dewey = inLocation3) OR
(inLocation4 IS NULL OR lewes = inLocation4))
ORDER BY ua.adddate DESC
LIMIT inStartItem, inRoomsPerPage;
END$$
これは、1 つまたは複数の場所を選択するたびに正常に機能しますが、スキップしようとすると機能しません (最後の inAddDate のすべてを選択する必要があります)。交換したら
(inLocation1 IS NULL OR downtown = inLocation1)
と
downtown = COALESCE(NULLIF(inLocation1, ''), downtown))
次に、場所をバイパスするとすべてが選択されますが、2つ以上の場所を検索したい場合は何も返されません。パラメータグループを追加する場所がもっとあるので、これを乗り越えるための良い方法があるはずです。