3 回答

TA贡献2019条经验 获得超9个赞
这是你想要的吗?
SELECT u.*
FROM user u
WHERE (id = ? OR ? IS NULL) AND
(age = ? OR ? IS NULL) AND
(height = ? OR ? IS NULL);
请注意,这需要在参数上加倍。
命名参数简化了此操作:
SELECT u.*
FROM user u
WHERE (id = :id OR :id IS NULL) AND
(age = :age OR :age IS NULL) AND
(height = :height OR :height IS NULL);

TA贡献1805条经验 获得超10个赞
你可以这样做:
SELECT * FROM user
WHERE
(0 = ? OR id = ?)
AND
(0 = ? OR age = ?)
AND
(0 = ? OR height = ?)
当你想搜索说和(我更喜欢cm)并且你不关心id时,你传递以下参数:age = 21height = 175
(0 = 0 OR id = 0)
AND
(0 = 1 OR age = 21)
AND
(0 = 1 OR height = 175)
意味着 的参数将是如果该列不相关并且它是否相关(参数也可以是任何内容)。
现在,因为计算结果总是为 TRUE(因为 is ),所以它不执行任何过滤。
但是因为是其他条件:并且必须是.
这样你就有了3 + 3个参数:
前3个是指示列是:
相关(所以你传递)
或不相关(所以你传递)的参数。
其他 3 个是执行筛选的实际参数(如果该列不相关,则为任何内容)。0 = ?01id(0 = 0 OR id = 0)0 = 0TRUE0 = 1FALSEage = 21height = 175TRUE10
添加回答
举报