Pb de différenciation entre null et 0 en SQL

Résolu/Fermé
juliette - 4 nov. 2011 à 10:23
 juliette - 4 nov. 2011 à 13:59
Bonjour,


Je souhaiterai connaitre une petite précision concernant les valeur NULL. Est-ce que SQL interprete le "0" comme une valeur NULL ou le différenciet-il ?
Est-ce que pou lui ==> NULL = 0 ou c'est différent ?
Merci

7 réponses

dna.factory Messages postés 24947 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 23 avril 2024 1 609
4 nov. 2011 à 10:33
0 est une valeur
null n'est pas une valeur

0 est 'plein'
null est vide

0 doit etre renseigné dans la base

(après, cela peut varier selon le logiciel utilisé)
2
Oui c'est bien ce qui me semblait. Mais j'ai un soucis au niveau de mon developpement :

$progiciel[(empty($donnees1['id_pgc']) ? "".'"selected ="selected' : '')] = 'Autre';
$progiciel[($donnees1['id_pgc'] == 0 ? "0".'"selected ="selected' : 0)] = 'Aucun';

Dans mon application il me fait un selected sur les 2. Alors que dans ma base, id_pgc = 0. Je ne comprend pas d'ou vient l'erreur.
0
Quelqu'un a-t-il une idée ?

(Je suis débutante)
0
dna.factory Messages postés 24947 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 23 avril 2024 1 609
4 nov. 2011 à 12:28
comme je l'ai dit, ça peut malheureusement varier selon le logiciel.
je t'ai donné la théorie sur laquelle on se rejoint.

je sais qu'il existe en sql la comparaison 'is null'
SELECT id FROM table WHERE champ IS NULL;
essaye d'attaquer différement ta base avec cette requete, puis avec celle =0 ou <1 et de voir si tu as les même résultat
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Justement j'ai fait cette requête. Et j'ai testé, cela me les différencie bien.

Quand je met WHERE XX IS NULL , on me renvoie que les tuples dont XX est null.
Quand je met WHERE XX = 0, on me renvoie que les tuples dont XX est égal à 0.

Donc je ne comprend pas pourquoi ma condition, ne marche pas.
$progiciel[(empty($donnees1['id_pgc']) ? "".'"selected ="selected' : '')] = 'Autre';
$progiciel[($donnees1['id_pgc'] == 0 ? "0".'"selected ="selected' : 0)] = 'Aucun';

Il me met les 2 select en selected, lorsque XX est null ou lorsque XX = 0. Alors qu'il ne devrait faire que l'un ou l'autre.
0
vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
4 nov. 2011 à 13:33
bonjour,

ya un truc qui me chiffone, pourquoi tu as autant de guillemet ? tu en as mis autour du 0 dans la seconde ligne, donc tu traite ca comme un string, sauf que tu l'affecte a rien, ensuite ya un caractere qui ressemble a un point suivi de guillemet et apostrophe (double et simple quote).
enfin c'est tellement le fouilli que je me demande si tu code vraiment en php et non en vba... (ya qu'avec le vba qu'on peux faire autant de bazard et faire en sorte que ca marche ^^')

tu devrais décomposer ton if d'une manière plus classique au lieu de mélanger les test booléen, les affectations etc...
ca te permettrais de mieu construire ton code et de ne pas faire d'erreur (à mon avis tu as voulu faire d'une manière si condensé que l'interpreteur ne pige plus rien au code)

j'espère avoir pus t'aider a mieux comprendre le problème
0
Ca y'est ! J'ai trouvé.. A force d'acharnement, j'ai trouvé l'erreur. La voici :

C'est le empty() qui posait probleme : il fallait plutôt mettre is_null().
$donnees1['id_pgc'] == 0 etait pas bon également, il fallait mettre des quote entre le 0 ==> $donnees1['id_pgc'] == "0"

Cela donne
$progiciel[(is_null($donnees1['id_pgc']) ? "".'"selected ="selected' : '')] = 'Autre';
$progiciel[($donnees1['id_pgc'] == "0" ? "0".'"selected ="selected' : 0)] = 'Aucun';

Merci à ceux qui m'ont répondu.
0