2010-03-01 4 views
2

임 HAVING하지만 난이 오류를 얻을 : 'HAVING 절'에 알 수없는 열 'zips.city을'MySQL의 PHP 쿼리 작업이 쿼리를 얻으려고 노력 절

내 지퍼 테이블이 도시 열이
 
`$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

+0

네, 그렇다고해서 쿼리가 불필요하게 복잡해질뿐입니다. 단순한 작업을 수행 할 때 둘 다 사용하는 이유는 무엇입니까? –

+0

@ Justin : 우리는 Pete가 원하는 것을 정말로 알지 못합니다. –

답변

6

where 절과 같은 것을 의미하지 않습니다 having 절 : 간단한 쿼리를 실행할 때, 당신은 사용해야합니다 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 명령 등하여 그 구조를 확인할 수 MySQL's manual page for select 인용 참조 용

desc zips; 


을 :

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

위대한 대답, 감사합니다. –

1

HAVING 대신 WHERE을 사용해보십시오.

+0

도움을 주셔서 감사합니다.이 오류가 있습니다. 알 수없는 열 'zips.city' 'where 절', –

1

올바른 방법은 WHERE 절을 사용하는 것입니다.

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

HAVING

당신이 그룹에 대한 설명 here를 볼 때 사용되는

0

O 이름 : Jeez 미안, 나는 문제를 알아 냈다, 분명히 내가 나의 테이블에서 칼럼의 이름을 지었을 때 도시 앞에 공간을 두었다. 그래서 나는 칼럼의 이름을 바꾸었다. 가지고있는 대신에 where 함수를 사용하면 일을 빠르게해야한다. 고마워!