我有一个工作解决方案,但我想知道是否有更好的方法来获得相同的结果。按给定参数过滤查询或空白如果没有提供
场景:
用户界面解析为一个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