запрос mysql php С предложением
Вопрос
Я пытаюсь заставить этот запрос работать, но я получаю эту ошибку:Неизвестный столбец "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());`
в моей таблице zips есть столбец city, поэтому я не уверен, в чем проблема, я знаю, что обращаюсь к базе данных, потому что я могу выполнить этот запрос без ошибок:
$zip1query = "SELECT zips.* FROM zips WHERE zips.zip = '$zip' ";
мы были бы очень признательны за любой совет!Спасибо!
Решение
Тот Самый 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 для 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
оговорка не может
Другие советы
Попробуйте использовать WHERE
вместо HAVING
.
Правильный способ сделать это — использовать предложение WHERE.
$query = "SELECT
zips.*
FROM
zips
WHERE
zips.city LIKE '%$city%'
AND
zips.stateabbr LIKE '%$state%'
LIMIT 1";
HAVING следует использовать при группировке, см. здесь для объяснения
о боже, извините, ребята, я понял проблему, видимо, я поставил пробел перед городом, когда называл столбцы в своей таблице.поэтому я переименовал столбец, и он работает, в любом случае, спасибо, ребята!но использование функцииwhere вместо этого должно значительно ускорить процесс, спасибо, ребята!