Предложение 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
Если вы используете HAVING, вам также понадобится GROUP BY. – Layke
Да, но это просто сделает запрос излишне сложным. Зачем использовать оба, когда просто будет делать ГДЕ? –
@ Justin: Мы действительно не знаем, чего хочет Пит. –