2010-03-01 36 views
2

林試圖讓這個查詢工作,但我得到這個錯誤:「having子句」在 未知列「zips.city」MySQL的PHP​​查詢HAVING子句

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

任何建議,將不勝感激!謝謝!

+1

如果您使用HAVING,則還需要GROUP BY。 – Layke 2010-03-01 22:05:20

+0

是的,但這隻會使查詢變得不必要的複雜。爲什麼在一個簡單的WHERE中可以同時使用? – 2010-03-01 22:06:33

+0

@Justin:雖然我們不太清楚Pete想要什麼。 – 2010-03-01 22:07:29

回答

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,這將是因爲該列不存在於您的表中。

在這種情況下,我們可以做的事情不多:您必須檢查表的結構,以確定它包含哪些列。

可以使用一個基於網絡的工具,像phpMyAdmin,或使用SQL指令諸如檢查結構:

desc zips; 


作爲參考,引用MySQL's manual page for select

The SQL standard requires that HAVING must reference only columns in the GROUP BY clause or columns used in aggregate functions.
...

Do not use HAVING for items that should be in the WHERE clause.
For example, do not write the following:

SELECT col_name FROM tbl_name HAVING col_name > 0; 

Write this instead:

SELECT col_name FROM tbl_name WHERE col_name > 0; 

...
The HAVING clause can refer to aggregate functions, which the WHERE clause cannot

+0

很好的答案,謝謝 – 2011-07-21 16:39:29

1

嘗試使用WHERE而不是HAVING

+0

謝謝你的幫助我得到這個錯誤:未知列'zips.city'in'子句', – 2010-03-01 22:07:10

1

正確的做法是使用WHERE子句。

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

HAVING是當你分組,看到here一個解釋使用

0

ö哎呀對不起,我發現了這個問題,顯然我在城市之前放了一個空間,當時我在桌子上命名了這些列。所以我重新命名了這個專欄,並且無論如何謝謝你!但使用where函數而不是必須加快事情,謝謝你們!