2010-03-01 2 views
2

Im пытаясь получить этот запрос, чтобы работать, но я получаю эту ошибку: Неизвестного столбца «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

+0

Да, но это просто сделает запрос излишне сложным. Зачем использовать оба, когда просто будет делать ГДЕ? –

+0

@ Justin: Мы действительно не знаем, чего хочет Пит. –

ответ

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

Отличный ответ, спасибо –

1

Попробуйте использовать WHERE вместо HAVING.

+0

Благодарим вас за помощь. Я получил эту ошибку: Неизвестная колонка 'zips.city' в 'where clause', –

1

Правильный способ сделать это с помощью предложения WHERE.

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

HAVING будет использоваться, когда вы группируя см here для объяснения

0

о господи извините, ребята, я понял проблему, видимо, я поставил пространство перед городом, когда я назвал столбцы в своем столе. поэтому я переименовал столбец, и он работает, спасибо всем! но используя функцию where вместо того, чтобы нужно ускорить все, спасибо, ребята!

Смежные вопросы