2

我试图让这个查询工作,但我收到了这个错误:“有子句”中的未知列“zips.city”

`$query = "选择
    拉链。*
    从
    拉链
    拥有
    zips.city LIKE '%$city%'
    和
    zips.stateabbr LIKE '%$state%'
    限制 1";
$result = mysql_query($query) 或死 (mysql_error());`

我的 zips 表有一个 city 列,所以我不确定问题是什么,我知道我正在访问数据库,因为我可以运行此查询而没有错误:

$zip1query = "选择
         拉链。*
         从
         拉链
         在哪里
         zips.zip = '$zip'              
         ";

任何建议将不胜感激!谢谢!

4

4 回答 4

6

having子句与该子句的含义不同where:运行简单查询时,您应该使用where-- 这是您在第二个查询中所做的,它有效。

having当条件必须应用于group by子句的结果时使用。


这意味着,在这里,您的查询应该以这种方式构建:

$query = "SELECT zips.*
    FROM zips
    where zips.city LIKE '%$city%' 
        AND zips.stateabbr LIKE '%$state%' 
    LIMIT 1";


这样,如果您仍然对不存在或未找到的列(至少 for cityand/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;

... 子句可以引用聚合函数,
子句 不能HAVINGWHERE

于 2010-03-01T22:05:15.797 回答
1

尝试使用WHERE而不是HAVING.

于 2010-03-01T22:04:57.857 回答
1

正确的方法是使用 WHERE 子句。

$query = "SELECT
zips.*
FROM
zips
WHERE
zips.city LIKE '%$city%' 
AND
zips.stateabbr LIKE '%$state%' 
LIMIT 1";

HAVING 将在您进行 GROUPing 时使用,请参阅此处了解说明

于 2010-03-01T22:05:14.157 回答
0

哦,天哪,对不起,伙计们,我发现了问题,显然,当我命名表中的列时,我在 city 之前放了一个空格。所以我重命名了该专栏,它仍然有效,谢谢伙计们!但是使用 where 函数而不是必须加快速度,谢谢大家!

于 2010-03-01T22:14:09.803 回答