probleme de requete sql et champs de valeur null...

Mammouth du PHP | 843 Messages

27 juin 2007, 11:23

salut à tous ;)

je ne comprend pas pourquoi, mais la requete suivante ne me détecte pas les champs avertissement égal à NULL et pourtant il detecte les champs avertissent égal à WANTED et dont le ticket_xhtml est egal à NULL :-k

Code : Tout sélectionner

SELECT COUNT(*) FROM goldbook WHERE `avertissement` = 'null' OR `avertissement` = 'wanted' AND `ticket_xhtml` != 'null'
si quelqu'un peut me dire pourquoi j'arrive pas à retourner de valeur pour les champs avertissement égal à NULL ?

merci d'avance ;)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 juin 2007, 12:36

a mon avis, c'est une question de parenthèses.

si ton test c'est
soit
avertissement = NULL
ou
avertissement = wanted et ticket_xhtml = null

j'aurais écrit ton test comme suit :

Code : Tout sélectionner

SELECT COUNT(*) FROM goldbook WHERE (`avertissement` = 'null') OR (`avertissement` = 'wanted' AND `ticket_xhtml` != 'null')
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 843 Messages

27 juin 2007, 22:23

en faite même si je fait simplement comme suit, je n'arrive pas à selectionner l'enregistrement correspondant à avertissement = NULL :?

Code : Tout sélectionner

SELECT * FROM goldbook WHERE `avertissement` = 'null'
rien n'est retourner bien que j'ai un enregistrement dont avertissement = NULL dans ma table ;?

voici la requete de création de ma table

Code : Tout sélectionner

CREATE TABLE table_goldbook( id int UNSIGNED AUTO_INCREMENT, pseudo VARCHAR(20) NOT NULL, avertissement CHAR(6) DEFAULT NULL, ticket_xhtml TEXT(65535) DEFAULT NULL, post_date date NOT NULL, PRIMARY KEY (id) ) TYPE = MYISAM CHARACTER SET latin1 COLLATE latin1_general_cs;
si qq1 à une idée ;)
Modifié en dernier par BeRoots le 27 juin 2007, 22:44, modifié 1 fois.
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Eléphant du PHP | 259 Messages

27 juin 2007, 22:33

hello,

si ton champ déclare les NULL, tu as la fonction ISNULL( le_champ_en_question )

Mammouth du PHP | 843 Messages

27 juin 2007, 22:46

le truc c'est que cela me detecte les champs `ticket_xhtml` = 'null' mais pas les `avertissement` = 'null' :?

je comprend pas :(

idem voir pir avec ISNULL(nom_du_champ)

si quelqu'un à une idée sur ce soucis ;)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

ViPHP
AB
ViPHP | 5818 Messages

27 juin 2007, 23:23

Et si tu enlèves les ` c'est pareil?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

27 juin 2007, 23:31

J'aimerais corriger le malentendu sur NULL/'null'/ISNULL()
  • 'null' est une chaîne de caractère
  • NULL (sans les guillemets) est la valeur NULL (peu importe la casse)
  • si vous voulez vérifier que quelque chose est NULL, utilisez plutôt la forme

    Code : Tout sélectionner

    WHERE nom_colonne IS NULL

Mammouth du PHP | 843 Messages

28 juin 2007, 10:43

OK j'ai fait comme suit pour recuperer touts les enregistrements dont avertissement et soit null soit egal à wanted avec ticket_xhtml à null.

Code : Tout sélectionner

SELECT * FROM table_goldbook WHERE `avertissement` IS NULL AND ( `avertissement` = 'wanted' AND `ticket_xhtml` IS NULL )
rien n'est retourner :(

si quelqu'un peut m'aider ;)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juin 2007, 12:20

Comme tu as du le voir quand tu as posté ton message, il nous faudrait un échantillon de tes données ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 5924 Messages

28 juin 2007, 14:24

Code : Tout sélectionner

WHERE `avertissement` IS NULL AND ( `avertissement` = 'wanted' AND `ticket_xhtml` IS NULL )
Les conditions

Code : Tout sélectionner

`avertissement` IS NULL
et

Code : Tout sélectionner

`avertissement` = 'wanted'
ne peuvent pas être vraies en même temps...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juin 2007, 15:27

Bien vu Sekiltoyai :pouce:

Il y a un OR qui est devenu un AND pendant la remise en forme ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 843 Messages

28 juin 2007, 22:29

mon truc c'est que je veut recuperer les enregistrements dont avertissement = null et aussi ceux dont avertissement = wanted et dont le champ ticket_xhtml != null

si quelqu'un a une idée a me proposer ;)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juin 2007, 23:32

Tu veux récupérer les enregistrements qui satisfont condition1 plus ceux qui satisfont condition2.

Si tu écrit

Code : Tout sélectionner

condition1 AND condition2
tu auras l'intersection des 2 conditions, c'est à dire les enregistrements qui satisfont condition1 et condition2

Toi, tu désires l'addition des 2 conditions, soit les enregistrements qui satisfont condition1 ou condition2
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

29 juin 2007, 01:10

Je me suis permis de remplacer "et" par "plus", qui a l'avantage d'être sémantiquement correct tout en évitant tout risque de confusion avec l'opérateur booléen "et" ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

29 juin 2007, 07:42

Effectivement, c'est plus clair.

J'ai pourtant essayé de le tourner dans tout les sens pour le rendre plus clair, mais j'avais pas trouvé.

Merci Hubert
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer