MySQL SELECT空白字段

时间:2012-09-26 16:01:54

标签: mysql

我在从数据库中检索一些记录时遇到了一些麻烦。我网站上的许多页面都标有各种值,以帮助搜索/组织。其中一个值设置了一个复选框。如果在后端检查该框,则值为“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等于“”的记录。我做错了什么?

2 个答案:

答案 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 .'"

Here is an example that illustrates my point.