0

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

4

2 回答 2

1

听起来好像您数据库中的字段的默认值为NULL. 您可以在HAVING子句中添加第二个条件来检查这一点:

HAVING is_active LIKE "%' . $active . '%" OR is_active IS NULL

编辑

我刚刚看到你is_active在选择列表中定义。使用MAX(),将忽略空值。您可以使用 nested-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
...
于 2012-09-26T16:06:16.687 回答
1

因此,如果$active为空,则您的查询如下所示:

is_active LIKE "%%"

这将返回该列不是的所有行NULL。是否有理由需要使用通配符进行搜索?也许你只需要:

is_active = "'. $active .'"

这是一个说明我的观点的例子。

于 2012-09-26T16:09:02.577 回答