我有一個工作解決方案,但我想知道是否有更好的方法來獲得相同的結果。按給定參數過濾查詢或空白如果沒有提供
場景:
用戶界面解析爲一個GUID搜索過濾器。因此,如果他們想要搜索與客戶John Doe
相關的所有記錄,他們將輸入John Doe,並在執行最終查詢之前將John Doe解析爲John Doe的customer_id。因此,如果CUSTOMER_ID爲XYZ-456
,查詢將是:
SELECT id AS item_id FROM items WHERE items.customer_id = 'XYZ-456';
這將返回該項目的ID,然後將其轉至其他流程爲用戶提供全面的搜索結果的用戶。
但顯然用戶可能根本沒有選擇過濾器。而不是插入整個WHERE
參數,我已經用以下解決方案:
SELECT id AS item_id FROM items WHERE items.customer_id LIKE '%$customer_id%';
所以,如果沒有給出,它解析爲:
SELECT id AS item_id FROM items WHERE items.customer_id LIKE '%%';
將返回所有(期望的結果)。
真的,這工作正常,但從技術上講,它們始終是以下customer_ids ,EXYZ-4567
的理論問題,其中兩個ID中較短的一個將爲customer_id返回項目。那麼有沒有一種「正確」的方式來說「返回所有結果where field ='X',但是如果'X'是空白,返回所有內容而不是什麼?
只知道:有任何理由,你爲什麼不帶編程語言做到這一點? – 2011-12-23 20:18:20
做哪部分?用條件語句寫出子句?因爲我更願意儘可能減少代碼,數據庫或編程。基本上,我使用YEAR()這樣的MySQL函數,而不是派生出代碼中的年份並將其傳入,原因與此相同。因爲數據庫可以這樣做,並且因爲我知道是否出現問題,所以使用的是查詢,而不是使用php和mysql不相處。 – Anthony 2011-12-24 03:07:39