Question

Im essayant d'obtenir cette requête fonctionne mais j'ai cette erreur:Inconnu colonne " zips.ville "dans" la clause having'

`$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());`

mon zips table a une colonne ville, donc je ne sais pas quel est le problème, je sais accéder à la base parce que je peux exécuter cette requête sans erreurs:

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

tout conseil serait grandement appréciée!merci!

Était-ce utile?

La solution

La clause having ne signifie pas la même chose que la clause where: lors de l'exécution d'une requête simple, vous devez utiliser where - qui est ce que vous avez fait dans votre deuxième requête, qui fonctionne

.

having est utilisée lorsque la condition doit être appliquée sur le résultat d'une clause de group by.


Ce qui signifie que, ici, votre requête doit être construit de cette façon:

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


Avec cela, si vous avez encore une erreur sur une colonne non-existante ou non trouvés (au moins pour city et / ou stateabbr) , ce sera parce que la colonne n'existe pas dans votre table.

Dans ce cas, il n'y a pas grand-chose que nous pouvons faire. Vous devrez vérifier la structure de votre table, pour déterminer les colonnes qu'il contient

Vous pouvez vérifier que la structure à l'aide d'un outil basé sur le Web comme phpMyAdmin ou en utilisant une instruction SQL comme:

desc zips;


Pour référence, citant page de manuel de MySQL pour select :

  

La norme SQL exige que PRESENTANT   doit faire référence uniquement les colonnes du   clause GROUP BY ou les colonnes utilisées dans   des fonctions d'agrégation. ...
  Ne plus utiliser pour les articles qui HAVING   devrait être dans la clause WHERE.   
Par exemple, ne pas écrire la   suivant:

SELECT col_name FROM tbl_name HAVING col_name > 0;
     

Ecrire ceci:

SELECT col_name FROM tbl_name WHERE col_name > 0;
     

...   
  La clause HAVING peut se référer à   des fonctions d'agrégation, que le WHERE   clause ne peut pas

Autres conseils

Essayez d'utiliser WHERE au lieu de HAVING.

La bonne façon de le faire est à l'aide d'une clause WHERE.

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

AYANT doit être utilisé lorsque vous regroupez, voir ici une explication

o jeez désolé les gars je me suis dit le problème, apparemment je mets un espace avant la ville quand je les colonnes nommé ma table. donc je renomme la colonne et il fonctionne de toute façon grâce chaps! mais en utilisant la fonction où doit avoir lieu d'accélérer les choses beaucoup, merci les gars!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top