MySQL PHP запрос HAVING предложение - PullRequest
2 голосов
/ 02 марта 2010

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

$zip1query = "SELECT 
         zips.*
         FROM 
         zips
         WHERE
         zips.zip = '$zip'              
         ";

любой совет будет высоко ценится! спасибо!

Ответы [ 4 ]

6 голосов
/ 02 марта 2010

Предложение 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 требует, чтобы должны ссылаться только на столбцы в 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 пункт не может

1 голос
/ 02 марта 2010

Правильный способ сделать это - использовать предложение WHERE.

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

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

1 голос
/ 02 марта 2010

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

0 голосов
/ 02 марта 2010

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

...