我试图让这个查询工作,但我收到这个错误:“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());`

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

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

,点击 就这样,如果你仍然对一个不存在的或者未找到列的错误的(至少city和/或stateabbr的,这将是因为该列不存在在你的表

在这种情况下,没有太多可以做的:你必须检查你的表的结构,以确定它包含列

可以使用基于网络的工具,像phpMyAdmin,或使用SQL指令诸如检查结构:

desc zips;

,点击 作为参考,引用 MySQL的用于select 手册页:

  

SQL标准要求具有   必须引用中唯一的列   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   子句不能

其他提示

尝试使用 WHERE 代替 HAVING.

适当的方式做到这一点是通过使用其中的条款。

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

有时要使用你们分组,看到 在这里, 对于一个解释

0哎呀对不起你们我想通了这个问题,显然我把航天城之前,当我在表中指定的列。所以我改名为列,反正工作的感谢家伙!但使用其中的功能,而不必必须加快东西很多,谢谢你们!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top