|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : janvier 2007 Messages : 122 ![]() |
Bonjour à tous,
je cherche à faire une requête assez complexe, mais je ne sais pas si c'est faisable: j'ai 2 tables Chaque éleve possède 3 ou n Livres. Chaque livre appartient à 1 élève. Chaque livre est d'un type ( soit 0 , soit 1 , soit 2 ) t_eleve(id_eleve,nom,prenom...) t_livre(id_livre,id_eleve,titre,...,type_livre) Je souhaite faire une requete qui me renvoi aléatoirement 3 livres par élèves, sauf que ces 3 livres doivent être le cas échant de type différent. Faut-il faire ça avec des requêtes imbriquées ? ou des jointures ? Merci pour votre aide. |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Saluton,
Moi je ferais une requête qui me renvoie aléatoirement un livre de type 0 par élève que je mettrais en UNION avec une requête qui me renvoie un livre de type 1 par élève que je mettrais en UNION avec une requête qui me renvoie un livre de type 2 par élève. Il y a dans les sources de ce forum un modèle de requête pour retourner les n (ici n=1) premiers éléments d'une catégorie. Désolé, je n'ai pas le temps de chercher le lien.
__________________
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) |
|
00
|
|
|
#3 | |
![]() ![]() |
Citation:
__________________
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 ! |
|
|
00
|
|
|
#4 | ||
|
Invité régulier
![]() Inscription : janvier 2007 Messages : 122 ![]() |
Bonsoir à vous,
je ne comprend pas très bien ta proposition. Je dois faire 3 INNER JOIN ? de ces 3 requêtes ? sur quel critère ? Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Non, tu dois faire des UNION ALL
En revanche, normalement, le ORDER BY est interdit avant une clause UNION. Donc selon si MySQL respecte ou non la norme SQL, la requête va marcher ou non. Sinon, il reste certainement une solution avec les fonctions de fenêtrage. |
|
|
00
|
|
|
#6 | ||
|
Invité régulier
![]() Inscription : janvier 2007 Messages : 122 ![]() |
J'avoue ne pas très bien comprendre.
Et si je fais une requête simple pour récupérer les ID de chaque élève, puis après je fais une boucle ou je récupère chaque livre ? je pense que ce n'est pas très optimisé mais apparemment si je voudrais tout faire en 1 seule requête SQL, ça a l'air très complexe... Code :
|
||
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : janvier 2007 Messages : 122 ![]() |
j'avoue être carrément perdu là
|
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Et comme ça ?
Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com