Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/12/2011, 19h13   #1
Futur Membre du Club
 
Inscription : octobre 2007
Messages : 92
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 92
Points : 15
Points : 15
Par défaut Conditions multiples SQL?

Bonjour,

Je viens vers vous car je n'ai pas trouvé ce que je cherchais : comment renvoyer les résultats de champs si ils sont remplis, et ne pas les renvoyer si ils sont vides?
je m 'explique : j ai une table /table/ , où j'ai disons 10 colonnes /colonnes1 ... colonnes10/
je veux demander de m'afficher les colonnes1 à 3 , plus certaines colonnes seulement si elles sont avec des infos...par exemple afficher la colonne 5/6 et 7 si elles ont été remplies...
suis assez clair?

Car jusqu'ici, la demande me retourne tous les enregistrements, puisque les colonnes 1 à 4 sont remplies
SELECT colonnes1,colonnes2,colonnes3,colonnes4,colonnes5,colonnes6,colonnes7 FROM table /// et là je mets quoi? WHERE ....

suis perdu.

Merci pour votre aide :-)
chanteur06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2011, 01h01   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Citation:
comment renvoyer les résultats de champs si ils sont remplis, et ne pas les renvoyer si ils sont vides?

je veux demander de m'afficher les colonnes1 à 3 , plus certaines colonnes seulement si elles sont avec des infos...par exemple afficher la colonne 5/6 et 7 si elles ont été remplies...
Pour bien exprimer le besoin, il est important d'utiliser les bons termes.
Une table est composée de lignes et de colonnes, pas de champs.

Le terme "enregistrement" que tu emploies est celui qui est le plus souvent employé à la place du bon terme "ligne".

Le terme "vide" peut être interprété de deux manières et qui donnera deux résultats différents :
- le marqueur NULL affichera NULL;
- une chaîne vide '' n'affichera rien.

Ta demande est ambigüe.
Veux-tu n'afficher que les lignes pour lesquelles les colonnes 5, 6 et 7 ne sont pas NULL et/ou n'ont pas une chaîne vide ?
Code :
1
2
3
4
5
6
WHERE col5 IS NOT NULL
  AND col5 <> ''
  AND col6 IS NOT NULL
  AND col6
  AND col7 IS NOT NULL
  AND col7
Veux-tu afficher toutes les lignes et ne rien afficher (afficher une chaîne vide) quand les colonnes 5, 6 et 7 sont NULL et ou contiennent une chaîne vide ?
Code :
1
2
3
4
SELECT col1, col2, col3, 
  COALESCE(col5, '') AS col5,
  COALESCE(col6, '') AS col6,
  COALESCE(col7, '') AS col7
COALESCE renvoie le premier argument non NULL et une chaîne vide n'est pas NULL.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/12/2011, 10h27   #3
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Saluton,
Pour le dire autrement, toutes les lignes de résultat retournées par la requête auront la même structure, que les colonnes nommées dans le SELECT contiennent qqe chose ou pas, voire NULL.
Une ligne fait partie du résultat ou pas, mais, si elle en fait partie, elle possède les mêmes colonnes que toutes les autres lignes du résultat.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2011, 11h08   #4
Futur Membre du Club
 
Inscription : octobre 2007
Messages : 92
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 92
Points : 15
Points : 15
CINEPHIL merci :-) ton premier code me donne le résultat voulu : seules les colonnes avec des lignes renseignées apparaissent donc. Ce ci en mettant bien
Code :
1
2
3
4
5
6
WHERE col5 IS NOT NULL
  AND col5 <> ''
  AND col6 IS NOT NULL
  AND col6 <> ''
  AND col7 IS NOT NULL
  AND col7 <> ''
à chaque fois...

Par contre , je n'ai pas réussi à faire fonctionner ton deuxieme code. On le marque simplement comme ça
Code :
1
2
3
4
SELECT col1, col2, col3, 
  COALESCE(col5, '') AS col5,
  COALESCE(col6, '') AS col6,
  COALESCE(col7, '') AS col7
ou avec
Code :
SELECT col1 FROM TABLE COALESCE(col5, ")
et sans WHERE ..?

Merci

Et pour résumer : vaut mieux demander à 1 qui sait , plutôt qu'à 100 qui cherchent...

PS: MALJUNA KRIS désolé mais c'est tres flou pour moi débutant ton explication, celle de CINEPHIL est bien plus concise /
..en tout cas, je ne me souviens pas avoir vu cet exemple dans le résumé SQL de Developpez.com : dommage. En esperant que ce résultat serve d'autres personnes pour une requête multiples conditions ;-)
chanteur06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2011, 12h38   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par chanteur06 Voir le message
CINEPHIL merci :-) ton premier code me donne le résultat voulu : seules les colonnes avec des lignes renseignées apparaissent donc.
C'est plutôt les lignes avec les colonnes renseignées !

Citation:
Ce ci en mettant bien
Code :
1
2
3
4
5
6
WHERE col5 IS NOT NULL
  AND col5 <> ''
  AND col6 IS NOT NULL
  AND col6 <> ''
  AND col7 IS NOT NULL
  AND col7 <> ''
à chaque fois...
Que veux-tu dire par "à chaque fois" ?

Citation:
Par contre , je n'ai pas réussi à faire fonctionner ton deuxieme code. On le marque simplement comme ça
Code :
1
2
3
4
SELECT col1, col2, col3, 
  COALESCE(col5, '') AS col5,
  COALESCE(col6, '') AS col6,
  COALESCE(col7, '') AS col7
ou avec
Code :
SELECT col1 FROM TABLE COALESCE(col5, ")
et sans WHERE ..?
Une requête SQL a au minimum la structure suivante :
Code :
1
2
SELECT -- une ou des colonnes ou des expressions utilisant des colonnes
FROM une-TABLE
Je ne t'ai donné que le début de la requête, la partie SELECT. Il manquait bien évidemment la partie FROM et éventuellement la restriction (partie WHERE) si tu as d'autres conditions de restrictions que le seul fait les colonnes soient ou pas renseignées.

Mais relis bien mon message, les deux requêtes n'ont pas le même objectif.
La première ne retournera que les lignes pour lesquelles les colonnes 5 à 7 ne seront ni NULL ni vides et la seconde retournera toutes les lignes mais remplacera l'affichage éventuel d'un NULL par une chaîne vide, c'est à dire que rien ne s'affichera dans ces colonnes NULL.

À toi de voir quel est ton besoin réel.

Pour apprendre le SQL, fais un tour chez SQLPro.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h33.


 
 
 
 
Partenaires

Hébergement Web