|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : avril 2011 Messages : 11 ![]() |
Bonjour,
je souhaite réaliser un formulaire liste qui affiche les données d'une tables (jusqu'ici pas de problème !) mais qui les classe au sein de cette même liste en sous catégorie en fonction d'un autre champ de la table. Ca sera plus clair avec mon exemple: J ai 2 tables : CLASSE: -id_classe (INT) -classe (TEXT) OBJET: -id_objet (INT) -objet (TEXT) -id_classe (INT) Et je voudrais que mon formulaire liste affiche : classe1 objet (dont id_classe=1) objet (dont id_classe=1) ... classe2 objet (dont id_classe=2) objet (dont id_classe=2) ... ... c'est à dire que la liste va afficher tous les objets (de la table objet), mais classés dans des sous-catégories (issue de la table classe) correspondant à leur id_classe. Je sais qu'il faut utiliser <optgroup>, pour afficher des sous-catégories dans une liste, avec la syntaxe suivante : Code :
La seul solution que j ai trouvé est d'écrire une requête pour chaque cas et pour chaque <optgroup> ! Mais cette solution ne me convient pas car elle a un ENORME inconvénient, c'est que si je rajoute une classe dans ma table "classes", je serais obligé de rajouter du code sur ma page !!! voici ce que j ai fait pour 2 sous-catégorie (j'ai pas coller le début du code sur la connexion à la BDD): Code :
Si quelqu'un à une idée ? Merci d'avance pour votre aide ! |
||||
|
|
00
|
|
|
#2 | ||
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
voila, après à toi d'adapter le nom exacte des champs si je me suis trompé, je l'ai pris de ton post :
Code :
__________________
Développeur informatique contrarié... |
||
|
|
10
|
|
|
#3 | ||
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 338 ![]() |
Sinon on peux tout faire en une seule requete :
Code :
__________________
Stay in Bed .. Save Energy |
||
|
|
10
|
|
|
#4 |
|
Invité de passage
![]() Inscription : avril 2011 Messages : 11 ![]() |
Merci à vous deux car je galérais j vais tester tout ca et j vous tiens au courant!!
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : avril 2011 Messages : 11 ![]() |
Bon j ai testé vos deux solution:
- La première (de VORACE) marche très bien, et j obtiens exactement ce que je souhaite ! PARFAIT ! - la seconde (de BOO64) qui tient tout sur 1 seule requête, ne marche pas ! la variable $row_classe (ligne11) n'existe pas (je pense que BOO64 à peut etre oublié de la changé en $row??) et même en la remplaçant cela ne marche toujours pas car j'ai le message suivant : "Undefined index: id_objet " car il y à aucun appel au champ id_objet dans la requête !! Voila, même si la 1er solution marche très bien et me convient parfaitement, je suis preneur si vous avez des solutions concernant la solution 2 (qui tiens avec 1 seul requête), histoire d'apprendre un peu plus chose sur le sujet ! Encore un grand merci pour votre aide précieuse! ![]() A+ |
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 338 ![]() |
Citation:
![]() Citation:
__________________
Stay in Bed .. Save Energy |
||
|
|
00
|
|
|
#7 | |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
Citation:
et la par contre : ça sera vrai pour la première ligne à tout les coups, donc tu fermes une balises que tu n'as jamais ouvert... j'ai rien contre les adeptes de la jointure mais de la à en mettre partout...
__________________
Développeur informatique contrarié... |
|
|
|
00
|
|
|
#8 | |||||
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 338 ![]() |
Citation:
Citation:
Code :
Citation:
euuu c'est pas être adepte ou pas c'est surtout pour un soucis de performance ... avec ta méthode tu vas requêter ta bdd autant de fois qu'il y a d'entrée dans la table classe. Donc imaginons que tu as 100 entrées dans la table classe pour chaque affichage du formulaire tu vas faire 101 requètes.. à multiplier par le nombre de visiteurs sur le site !! donc oui je préfère faire une jointure ici
__________________
Stay in Bed .. Save Energy |
|||||
|
|
00
|
|
|
#9 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
je ne vais pas polémiquer la dessus mais en terme d'optimisation y a pas que les jointures surtout si elles sont mal faites ou gourmande en ressource :
http://www.apprendre-php.com/tutorie...imisation.html
__________________
Développeur informatique contrarié... |
|
|
00
|
|
|
#10 | |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 338 ![]() |
Citation:
Bien entendu si la base est mal conçue (pas d'index sur les conditions de jointures etc..) les jointures peuvent devenir plus pénalisantes que bénéfiques mais bon dans ce cas précis c'est une simple jointure entre deux tables. Cordialement
__________________
Stay in Bed .. Save Energy |
|
|
|
00
|
|
|
#11 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
désolé, je m'emporte un peu mais bon faut me comprendre, je suis sur pentaho et depuis 1 mois et demi je fais que des transformations et des requêtes (pleines de jointure) d’où mon dégout passager pour les requêtes sur plus d'une table...
__________________
Développeur informatique contrarié... |
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : avril 2011 Messages : 11 ![]() |
Effectivement la solution de BOO64 marche très bien après ces quelques modifications ! Merci !
Ca serait génial (si c'est pas trop demander bien sur!), si vous pouviez me détailler/expliquer la requête (de la solution 2 de boo64) qui me semble bien compacté et complexe. j'ai vu qu'il y avait une jointure, mais je ne comprend pas tout notamment les lettres ("c" ou "o") qui se balade dans la requête ou encore les lettres placer devant le nom des champs et tables. Je suis plutot un debutant en PHP et je ne comprend pas tout ! Si vous pouvez m éclaircir la dessus, je vous en remercie d'avance. |
|
|
00
|
|
|
#13 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
les lettres sont des alias :
http://sql.1keydata.com/fr/sql-alias.php
__________________
Développeur informatique contrarié... |
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Inscription : avril 2011 Messages : 11 ![]() |
Merci beaucoup !
![]() A+ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com