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!

¿Fue útil?

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 utilice HAVING para los artículos que   debe estar en la cláusula WHERE.   
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áusula HAVING puede referirse a   funciones de agregado, que la WHERE   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!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top