我试图让这个查询工作,但我收到此错误: 'having clause'中的未知列'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' ";
任何建议将不胜感激!谢谢!
答案 0 :(得分:6)
having
子句与where
子句的含义不同:运行简单查询时,应使用where
- 这就是你在第二个中所做的查询,有效。
having
子句的结果时,使用 group by
。
这意味着,在这里,您的查询应该以这种方式构建:
$query = "SELECT zips.*
FROM zips
where zips.city LIKE '%$city%'
AND zips.stateabbr LIKE '%$state%'
LIMIT 1";
有了这个,如果您仍然有关于不存在或未找到的列(至少对于city
和/或stateabbr
)的错误,那将是因为该列中不存在该列。
在这种情况下,我们无能为力:您必须检查表的结构,以确定它包含哪些列。
您可以使用基于Web的工具(如phpMyAdmin)或使用SQL指令检查该结构,例如:
desc zips;
供参考,引用MySQL's manual page for 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
条款不能
答案 1 :(得分:1)
尝试使用WHERE
代替HAVING
。
答案 2 :(得分:1)
正确的方法是使用WHERE子句。
$query = "SELECT
zips.*
FROM
zips
WHERE
zips.city LIKE '%$city%'
AND
zips.stateabbr LIKE '%$state%'
LIMIT 1";
HAVING将在您进行分组时使用,请参阅here获取解释
答案 3 :(得分:0)
o jeez对不起伙计们我发现了问题,显然我在城市之前放了一个空格,当时我在桌子上命名列。所以我重新命名了这个专栏,无论如何,它都有效!但是使用where功能而不是必须加快速度,谢谢你们!