Dou*_*eux 2 php mysql clause having
我试图让这个查询工作,但我得到这个错误:'having子句'中的未知列'zips.city'
`$query = "SELECT
zips.*
FROM
zips
HAVING
zips.city LIKE '%$city%'
AND
zips.stateabbr LIKE '%$state%'
LIMIT 1";
$result = mysql_query($query) or die (mysql_error());`
我的拉链表有一个城市列,所以我不知道问题是什么,我知道我访问数据库,因为我可以运行此查询没有错误:
$zip1query = "SELECT
zips.*
FROM
zips
WHERE
zips.zip = '$zip'
";
任何建议将不胜感激!谢谢!
该having子句与子句的含义不同where:在运行简单查询时,您应该使用where- 这是您在第二个查询中所做的,这是有效的.
having当条件必须应用于group by子句的结果时使用.
这意味着,在这里,您的查询应该以这种方式构建:
$query = "SELECT zips.*
FROM zips
where zips.city LIKE '%$city%'
AND zips.stateabbr LIKE '%$state%'
LIMIT 1";
Run Code Online (Sandbox Code Playgroud)
有了这个,如果你仍然有一个关于不存在或未找到的列的错误(至少是city和/或stateabbr),那将是因为你的表中不存在该列.
在这种情况下,我们无能为力:您必须检查表的结构,以确定它包含哪些列.
您可以使用基于Web的工具(如phpMyAdmin)或使用SQL指令检查该结构,例如:
desc zips;
Run Code Online (Sandbox Code Playgroud)
供参考,引用MySQL的手册页select:
SQL标准要求HAVING必须仅引用
GROUP BY聚合函数中使用的 子句中的列.
...
不要HAVING用于条款中应该包含的项目WHERE.
例如,不要写下面的内容:Run Code Online (Sandbox Code Playgroud)SELECT col_name FROM tbl_name HAVING col_name > 0;写这个:
Run Code Online (Sandbox Code Playgroud)SELECT col_name FROM tbl_name WHERE col_name > 0;......
该HAVING子句可以引用聚合函数,该WHERE条款不能