Cláusula HAVING de consulta MySQL PHP
Pregunta
Estoy intentando que esta consulta funcione pero aparece este error:Columna desconocida 'zips.city' en 'cláusula de tener'
`$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());`
mi tabla zips tiene una columna de ciudad, así que no estoy seguro de cuál es el problema. Sé que estoy accediendo a la base de datos porque puedo ejecutar esta consulta sin errores:
$zip1query = "SELECT zips.* FROM zips WHERE zips.zip = '$zip' ";
¡Cualquier consejo sería muy apreciado!¡gracias!
Solución
La cláusula having
no significa lo mismo que la cláusula where
: cuando se ejecuta una consulta simple, se debe utilizar where
- que es lo que hizo en su segunda consulta, que las obras
having
se utiliza cuando la condición se tiene que aplicar sobre el resultado de una cláusula group by
.
Lo que significa que, aquí, la consulta debe ser construir de esta manera:
$query = "SELECT zips.*
FROM zips
where zips.city LIKE '%$city%'
AND zips.stateabbr LIKE '%$state%'
LIMIT 1";
Con eso, si usted todavía tiene un error sobre una columna no existente o no encontrado (al menos para city
y / o stateabbr
) , será porque esa columna no existe en su mesa.
En este caso, no hay mucho que podemos hacer: vas a tener que comprobar la estructura de la tabla, para determinar qué columnas que contiene
.Se puede comprobar que la estructura mediante una herramienta basada en la web como phpMyAdmin, o el uso de una instrucción SQL como:
desc zips;
Como referencia, citando página del manual de MySQL para select
:
El estándar SQL requiere que el tener debe hacer referencia sólo a las columnas de la cláusula
GROUP BY
o columnas utilizadas en Funciones agregadas. ...
no utiliceHAVING
para los artículos que debe estar en la cláusulaWHERE
.
Por ejemplo, no escriba la siguiente:SELECT col_name FROM tbl_name HAVING col_name > 0;
Escribe esto en su lugar:
SELECT col_name FROM tbl_name WHERE col_name > 0;
...
La cláusulaHAVING
puede referirse a funciones de agregado, que laWHERE
cláusula no puede
Otros consejos
Intenta usar WHERE
en lugar de HAVING
.
La forma correcta de hacerlo es mediante el uso de una cláusula WHERE.
$query = "SELECT
zips.*
FROM
zips
WHERE
zips.city LIKE '%$city%'
AND
zips.stateabbr LIKE '%$state%'
LIMIT 1";
es tener que ser utilizado cuando se está agrupando, consulte aquí para obtener una explicación
o jeez lo siento chicos me di cuenta del problema, al parecer pongo un espacio antes de la ciudad cuando puse el nombre de las columnas en mi mesa. así que el nuevo nombre de la columna y funciona gracias de todos modos caps! pero utilizando la función donde en lugar de tener las cosas a velocidad debe mucho, gracias chicos!