IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[MySQL] Savoir si un champ est NULL ou pas


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [MySQL] Savoir si un champ est NULL ou pas
    Bonjour,

    J'ai longuement cherché sur les tutoriaux SQL et les forums, mais je ne trouve pas de réponse à ma question :

    Dans un SELECT, peut-on retourner une valeur 0 (ou FALSE) si un champ est NULL, et 1 (ou true) s'il contient des données ?

    Ca prendrait moins de mémoire dans ma requête que de sélectionner le champ puis constater s'il est vide ou non via un if (!empty($column)) {...}

    Merci !

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Table WHERE Champ IS NULL
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Table WHERE Champ IS NOT NULL

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Si ce n'était que ça, j'aurai trouvé dans les tutos

    Le but n'est pas de selectionner toutes les colonnes nulles, mais de savoir si un champ l'est en ne retournant pas son contenu mais une valeur false/true.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    En gros il s'agirait de trouver une fonction "null ou pas ?" dans un select de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT null_ou_pas(column) WHERE id = var

  5. #5
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Ah ! Désolé, j'avais lu en diagonale.

    Tout dépend du SGBDR. Par exemple sous Oracle, tu as la fonction NVL qui te permet de faire ce genre de chose. Sinon, Tu peux faire une union entre deux select comme ceci, mais ça me parrait un peu barbare :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT 1 as champNullOuPas from table where champ is null
    union
    SELECT 0 as champNullOuPas from table where champ is not null

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je suis sous MySQL 4.0.25, voici ma requete complete qui est dans une boucle alphabétique (afin d'afficher les résultats lettre par lettre) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id, name, translation, annotations FROM disco_tracks WHERE name LIKE "'.$char.'%" ORDER BY name ASC
    En fait translation et annotations sont des champs TEXT. J'ai juste besoin de savoir s'ils sont vides ou pas pour afficher des indications relatives à la disponibilités de ces contenus, mais je n'ai pas besoin d'afficher ces contenus.

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par Keulig
    Je suis sous MySQL 4.0.25, voici ma requete complete qui est dans une boucle alphabétique (afin d'afficher les résultats lettre par lettre) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id, name, translation, annotations FROM disco_tracks WHERE name LIKE "'.$char.'%" ORDER BY name ASC
    En fait translation et annotations sont des champs TEXT. J'ai juste besoin de savoir s'ils sont vides ou pas pour afficher des indications relatives à la disponibilités de ces contenus, mais je n'ai pas besoin d'afficher ces contenus.
    Pourquoi ne pas faire un CASE WHEN sur expression qui retourne 0 ou 1 (ça ressemble énormément à ce que propose KiLVaiDeN) ?

  8. #8
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Est-ce que tu as accès à la fonction IFNULL() dans ta version de MySQL ?

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Oui, je viens d'ailleurs de trouver cette fonction en recherchant ""CASE WHEN" MYSQL" dans google !

    Merci beaucoup je n'arrivais pas à trouver cette fonction

    Désolé du dérangement... (j'ai pourtant cherché dans les tutos du site)

  10. #10
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Aucun dérangement, ça m'a permi de me rappeller que cette fonction existe ! Je passe trop de temps sur Oracle ces derniers jours A+

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Dans la doc de mysql ils expliquent comment gagner encore + de mémoire :
    SELECT id, name, IF(STRCMP(translation,NULL),'non','oui') AS translation, IF(STRCMP(annotations,NULL),'non','oui') AS annotations FROM disco_tracks WHERE name LIKE "'.$char.'%" ORDER BY name ASC
    Si annotations = oui, alors il y'a du contenu (pareil pour translation)

    Encore merci, A+ !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Test pour voir si un champ est null ou pas
    Par ddove53 dans le forum ASP
    Réponses: 2
    Dernier message: 03/02/2010, 15h33
  2. [MySQL] Savoir si un champ est NULL
    Par hpavavar dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/03/2007, 19h40
  3. [Access] Comment savoir qu'un champs est vide ?
    Par Oberown dans le forum ASP
    Réponses: 9
    Dernier message: 25/10/2004, 10h47
  4. [Requete] Savoir si un champ est remplit
    Par slowpoke dans le forum Requêtes
    Réponses: 8
    Dernier message: 13/08/2003, 11h12
  5. Tester si un champ est NULL
    Par titititi007 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/06/2003, 10h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo