我在从数据库中检索一些记录时遇到了一些麻烦。我网站上的许多页面都标有各种值,以帮助搜索/组织。其中一个值设置了一个复选框。如果在后端检查该框,则值为“1”。如果没有检查它是空白的。
这是我的SELECT
声明。它用于AJAX搜索网站访问者搜索产品。
SELECT *,
MAX( CASE WHEN name = "is_active" THEN value END ) AS is_active,
GROUP_CONCAT(...
...
HAVING is_active LIKE "%'.$active.'%"
我省略了SELECT
语句的一部分以节省空间。
除了我给出的例子之外,该陈述完美无缺。如果访问者未检查前端的活动复选框,则返回结果,就好像已检查...或等于“1”。如果选中该框,则没有变化。好像我无法让它返回is_active
等于“”的记录。我做错了什么?
答案 0 :(得分:1)
听起来好像数据库中的字段的默认值为NULL
。您可以在HAVING
子句中添加第二个条件来检查:
HAVING is_active LIKE "%' . $active . '%" OR is_active IS NULL
修改
我刚看到您在选择列表中定义is_active
。使用MAX()
时,将忽略空值。您可以使用嵌套 - CASE
来解决此问题:
SELECT *,
MAX(
CASE WHEN name = "is_active" THEN
(CASE WHEN value IS NULL THEN 0 WHEN value = '' THEN 0 ELSE value END)
END
) AS is_active
...
答案 1 :(得分:1)
因此,如果$active
为空,那么您的查询如下:
is_active LIKE "%%"
这将返回该列不是NULL
的所有行。您是否需要使用通配符进行搜索?也许你只需要:
is_active = "'. $active .'"