3 回答

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
這是你想要的嗎?
SELECT u.*
FROM user u
WHERE (id = ? OR ? IS NULL) AND
(age = ? OR ? IS NULL) AND
(height = ? OR ? IS NULL);
請注意,這需要在參數(shù)上加倍。
命名參數(shù)簡化了此操作:
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貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
你可以這樣做:
SELECT * FROM user
WHERE
(0 = ? OR id = ?)
AND
(0 = ? OR age = ?)
AND
(0 = ? OR height = ?)
當(dāng)你想搜索說和(我更喜歡cm)并且你不關(guān)心id時(shí),你傳遞以下參數(shù):age = 21height = 175
(0 = 0 OR id = 0)
AND
(0 = 1 OR age = 21)
AND
(0 = 1 OR height = 175)
意味著 的參數(shù)將是如果該列不相關(guān)并且它是否相關(guān)(參數(shù)也可以是任何內(nèi)容)。
現(xiàn)在,因?yàn)橛?jì)算結(jié)果總是為 TRUE(因?yàn)?is ),所以它不執(zhí)行任何過濾。
但是因?yàn)槭瞧渌麠l件:并且必須是.
這樣你就有了3 + 3個(gè)參數(shù):
前3個(gè)是指示列是:
相關(guān)(所以你傳遞)
或不相關(guān)(所以你傳遞)的參數(shù)。
其他 3 個(gè)是執(zhí)行篩選的實(shí)際參數(shù)(如果該列不相關(guān),則為任何內(nèi)容)。0 = ?01id(0 = 0 OR id = 0)0 = 0TRUE0 = 1FALSEage = 21height = 175TRUE10
添加回答
舉報(bào)