Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes 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 19/11/2010, 15h52   #1
Membre régulier
 
Inscription : octobre 2010
Messages : 252
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 252
Points : 92
Points : 92
Par défaut Faire une requete complexe avec des conditions

Bonjour,

Je souhaiterais savoir selon un cas théorique comment placer des conditions dans des requêtes, car en effet je vois certains mot clés qui me sont inconnus et je pense apprendre de nouvelles choses par ce poste !

J'aimerais pouvoir faire une requête, un SELECT (si toutefois c'est possible) gérant un algorithme de ce type (tous les mots entre crochets symbolisent des champs):

Code :
1
2
3
4
5
6
7
8
9
 
$x = 0
while ($x < [nb_membres])
{
  SELECT [prenom_membre_'$x']
  SELECT [nom_membre_'$x']
  SELECT [mail_membre_'$x']
   $x++
}
Bref, une requête capable de me sélectionner toutes les entrées en fonction d'un nombre, je n'en ai pas vraiment besoin, mais ça m'intéresse beaucoup d'apprendre à faire ce genre de requête complexe, j'imagine que cette syntaxe va froisser plus d'un puriste J'aurais bien fait un début de syntaxe SQL mais au final ça n'aurait pas été clair du tout car j'ai un niveau site du zéro (niveau jointure ) et il y aurait eût trop de trous pour faire quelque chose de compréhensible...

Avis aux amateurs !
student_php est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 16h20   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 943
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 : 10 943
Points : 18 136
Points : 18 136
Envoyer un message via MSN à CinePhil
Tu as un gros besoin d'apprendre le SQL !

Je suppose que tu as une table des membres appelée 'membre'.

Besoin : Sélectionner (SELECT) le nom, le prénom et le mail dans la table (FROM) membre.

Requête :
Code :
1
2
SELECT prenom_membre, nom_membre, mail_membre
FROM membre
Simple non ?

Si tu veux limiter le nombre de membres retournés par la requête, il te suffit d'utiliser l'instruction LIMIT qui est spécifique à MySQL. Exemple pour 10 membres :
Code :
1
2
3
SELECT prenom_membre, nom_membre, mail_membre
FROM membre
LIMIT 10
__________________
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
Vieux 22/11/2010, 08h56   #3
Membre régulier
 
Inscription : octobre 2010
Messages : 252
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 252
Points : 92
Points : 92
Bonjour,

J'ai le niveau pour faire ce genre de requête, admettons plutôt une table groupes qui aurait les champs suivants:

prenom_membre1, nom membre_1, mail_membre1,
prenom_membre2, nom membre_2, mail_membre2,
prenom_membre3, nom membre_3, mail_membre3,
prenom_membre4, nom membre_4, mail_membre4,
prenom_membre5, nom membre_5, mail_membre5,
prenom_membre6, nom membre_6, mail_membre6

Le problème: Chaque groupe peut avoir entre 1 et 6 membres, il y a donc également un champ: nb_membres.

Lors de la récupération des données actuellement je ferais (en négligeant la syntaxe php de connexion à la bdd etc):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SELECT nb_membres FROM groupes
 
IF (nb_membres == 1)
{
     SELECT prenom_membre1, nom_membre1, mail_membre1 FROM groupes
}
 
else IF (nb_membres == 2)
{
     SELECT prenom_membre1, nom_membre1, mail_membre1, prenom_membre2, nom_membre2, mail_membre2 FROM groupes
}
 
etc...
Et je voudrais éviter cette batterie de if/else if en faisant tout mon traitement dans ma requête.
student_php est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 09h48   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 943
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 : 10 943
Points : 18 136
Points : 18 136
Envoyer un message via MSN à CinePhil
Donc ce n'est peut-être pas de cours SQL dont tu as besoin mais de cours sur la modélisation des données !

Exemple...

Règle de gestion :
Un membre appartient à un seul groupe et un groupe peut avoir de 1 à 6 membres.

MCD :
Membre -1,1----Appartenir----1,6- Groupe

Nota : en réalité, dans un MCD merise, contrairement au diagramme de classes UML, on ne précise par la cardinalité maximale quand elle est supérieure à 1. Ici, ça devrait donc être 1,n du côté de Groupe.

Tables :
Membre (mbr_id, mbr_nom, mbr_prenom, mbr_mail)
Groupe (grp_id, grp_nom, grp_nb_membres_maxi)
Membre_groupe (mg_id_membre, mg_id_groupe)

Nota : il faudra prévoir un trigger à l'insertion dans la table membre_groupe pour vérifier que le nombre maxi de membres du groupe n'est pas atteint.

Requête donnant les groupes avec leurs membres :
Code :
1
2
3
4
5
6
SELECT g.grp_nom,
    m.mbr_nom, mbr_prenom, mbr_mail
FROM Groupe AS g
INNER JOIN Membre_groupe AS mg ON mg.mg_id_groupe = g.grp_id
    INNER JOIN Membre AS m ON m.mbr_id = mg.mg_id_membre
ORDER BY g.grp_nom, m.mbr_nom, mbr_prenom
__________________
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 22/11/2010, 10h09   #5
Membre régulier
 
Inscription : octobre 2010
Messages : 252
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 252
Points : 92
Points : 92
Effectivement ton astuce de créer une table "Membre_groupe (mg_id_membre, mg_id_groupe)" résout le problème ! Et c'est beaucoup plus propre...

Merci pour cette explication de qualité !
student_php est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h40.


 
 
 
 
Partenaires

Hébergement Web