mysql php查询HAVING子句

时间:2010-03-01 22:03:10

标签: php mysql having clause

我试图让这个查询工作,但我收到此错误: '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'              
         ";

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

4 个答案:

答案 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功能而不是必须加快速度,谢谢你们!