mysql php requête clause HAVING
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!
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 quiHAVING
devrait être dans la clauseWHERE
.
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 clauseHAVING
peut se référer à des fonctions d'agrégation, que leWHERE
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!