mysql php查询HAVING子句

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'              
         ";

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

Pas*_*TIN 6

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.
例如,不要写下面的内容:

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;
Run Code Online (Sandbox Code Playgroud)

......
HAVING子句可以引用聚合函数,该WHERE 条款不能