该having
子句与该子句的含义不同where
:运行简单查询时,您应该使用where
-- 这是您在第二个查询中所做的,它有效。
having
当条件必须应用于group by
子句的结果时使用。
这意味着,在这里,您的查询应该以这种方式构建:
$query = "SELECT zips.*
FROM zips
where zips.city LIKE '%$city%'
AND zips.stateabbr LIKE '%$state%'
LIMIT 1";
这样,如果您仍然对不存在或未找到的列(至少 for city
and/or stateabbr
)有错误,那是因为该列在您的表中不存在。
在这种情况下,我们无能为力:您必须检查表的结构,以确定它包含哪些列。
您可以使用 phpMyAdmin 等基于 Web 的工具或使用 SQL 指令检查该结构,例如:
desc zips;
作为参考,请引用MySQL 的手册页select
:
SQL 标准要求 HAVING 必须仅引用
GROUP BY
子句中的列或聚合函数中使用的列。
...
不要HAVING
用于应该在WHERE
子句中的项目。
例如,不要写以下内容:
SELECT col_name FROM tbl_name HAVING col_name > 0;
改为这样写:
SELECT col_name FROM tbl_name WHERE col_name > 0;
...
子句可以引用聚合函数,
子句
不能HAVING
WHERE