Selectionner seulement les valeurs non nulles dans une BDD
Résolu
chantaussel
Messages postés
137
Date d'inscription
Statut
Membre
Dernière intervention
-
chantaussel Messages postés 137 Date d'inscription Statut Membre Dernière intervention -
chantaussel Messages postés 137 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai une BDD avec un champ "lieu_n" et un champ "lieu_d". Ils contiennent des noms de villes; parfois la ville n'est pas renseignée la valeur est donc nulle (NULL par défaut). Je veux faire une requête pour récupérer tous les noms de ville qui apparaissent dans ma bdd, sans avoir de doublons, et sans comptabiliser la valeur NULL et regrouper tout ça dans un seul champ "lieu". Le but et de faire apparaitre la liste des villes dans une liste déroulante.
Je fais donc la requête suivante:
Et mon code pour la liste déroulante:
Tout fonctionne bien si ce n'est que j'ai dans ma liste déroulante une ligne vide en première position, qui disparait si je rajoute "if($donnees['lieu']) { (...)" lors de la récupération des données.
Je trouve ça très bizarre, est-ce que quelqu'un saurait comment faire pour ne pas avoir à rajouter ce if, pour que la valeur nulle n'apparaisse pas du tout lors de la requête?
Merci d'avance :)
J'ai une BDD avec un champ "lieu_n" et un champ "lieu_d". Ils contiennent des noms de villes; parfois la ville n'est pas renseignée la valeur est donc nulle (NULL par défaut). Je veux faire une requête pour récupérer tous les noms de ville qui apparaissent dans ma bdd, sans avoir de doublons, et sans comptabiliser la valeur NULL et regrouper tout ça dans un seul champ "lieu". Le but et de faire apparaitre la liste des villes dans une liste déroulante.
Je fais donc la requête suivante:
(SELECT DISTINCT lieu_n lieu FROM table WHERE lieu_n IS NOT NULL) UNION (SELECT DISTINCT lieu_d lieu FROM table WHERE lieu_d IS NOT NULL) ORDER BY lieu $i = 1; while($donnees = mysql_fetch_array($reponse)) { $lieu[$i] = $donnees['lieu']; $i++; } $nblieu = $i - 1;
Et mon code pour la liste déroulante:
<select> <?php for ($i = 1; $i <= $nblieu; $i++) { ?> <option><?php echo $lieu[$i]; ?></option> <?php } ?> </select>
Tout fonctionne bien si ce n'est que j'ai dans ma liste déroulante une ligne vide en première position, qui disparait si je rajoute "if($donnees['lieu']) { (...)" lors de la récupération des données.
Je trouve ça très bizarre, est-ce que quelqu'un saurait comment faire pour ne pas avoir à rajouter ce if, pour que la valeur nulle n'apparaisse pas du tout lors de la requête?
Merci d'avance :)
A voir également:
- Selectionner seulement les valeurs non nulles dans une BDD
- Comment selectionner toutes les photos dans google photo - Guide
- Selectionner texte sur pdf - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Comment sélectionner un message sur whatsapp pour y répondre - Guide
- Excel liste de valeurs - Guide
9 réponses
tu peux tout faire en une seule boucle.
echo '<select>'; while($donnees = mysql_fetch_array($reponse)) { echo '<option>' . $donnees['lieu'] . '</option>'; } echo '</select>';
Oui effectivement, avec while c'est plus simple, mais par curiosité je me demande bien pourquoi il me sort une valeur nulle dans les résultats de la requête.
Merci :)
Merci :)
il suffit de faire une erreur de manipulation dans tes i pour que le while pédale dans le vide et te donne des résultats vides
J'ai fait cette boucle en while tout un tas de fois, pour faire aussi une liste déroulante avec les résultats de la requête et c'est la première fois que ça fait ça. Et il me semble pas que je m'embrouille dans les i? Quand j'écris
c'est quand même assez simple il me semble?
Merci.
$i = 1; while($donnees = mysql_fetch_array($reponse)) { $lieu[$i] = $donnees['lieu']; $i++; }
c'est quand même assez simple il me semble?
Merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
c'est surtout ce que tu fais ton i par le suite qui peut perturber, mais faire 2 boucles successives qui va foire le même nombre de tours, ça ne sert à rien, ça peut être source d'erreur, la preuve en image.
Je viens de simplifier ma page, juste pour faire un test. Je fais donc une boucle en while pour la requête, puis une en for pour l'affichage de la liste déroulante. Oui, j'utilise le "même" $i pour mes deux boucles, mais je lui redonne la bonne valeur de départ à chaque fois. (C'est exactement le code que j'ai posté dans le 1er message)
Et j'ai toujours ma ligne vide. Si je fais exactement la même chose mais en faisant une requête sur un autre champ je n'ai plus de ligne vide. Je ne pense donc pas que ça vienne de ma boucle, qui fonctionne très bien, mais de la requête qui me renvoie des données nulles malgré le "WHERE lieu IS NOT NULL". Honnêtement ce n'est dramatique, car un if règle le problème, mais c'est juste bizarre.
Merci de ton aide.
Et j'ai toujours ma ligne vide. Si je fais exactement la même chose mais en faisant une requête sur un autre champ je n'ai plus de ligne vide. Je ne pense donc pas que ça vienne de ma boucle, qui fonctionne très bien, mais de la requête qui me renvoie des données nulles malgré le "WHERE lieu IS NOT NULL". Honnêtement ce n'est dramatique, car un if règle le problème, mais c'est juste bizarre.
Merci de ton aide.
Bonjour
WHERE lieu IS NOT NULL élimine les lignes où lieu est NULL, mais pas les lignes ou lieu est une chaîne vide ou simplement constituée d'espaces.
Essaye
WHERE lieu IS NOT NULL élimine les lignes où lieu est NULL, mais pas les lignes ou lieu est une chaîne vide ou simplement constituée d'espaces.
Essaye
...WHERE lieu IS NOT NULL AND TRIM(lieu)<>''