Regroupement et Tri : cas particuler

Regroupement et Tri : cas particuler - SQL/NoSQL - Programmation

Marsh Posté le 23-04-2008 à 12:39:18    

Bonjour à tous,
 
J'ai une question en rapport avec le regroupement et le tri.
J'ai 2 tables : 'Contenu' et 'Pistes' dans un contexte de discoraphie d'un groupe.
La première table me permet de gérer le contenu d'un album (type de support, numéro de l'entité...
ex : face B de la cassette.)
La deuxième table me permet de stocker les tracklistings et cette table contient donc une clé étrangère
vers la première.
 
Mon problème se pose au fait qu'il y ait des pistes cachées. Pour gérer cela, j'ai une clé dans la table
'Pistes' qui pointe sur elle-même. Exemple : si la 5ème piste nommée 'Truc' de mon album contient 2 pistes  
cachées 'Cache1' et'Cache2' alors dans la table 'Pistes' j'ai :
 
id             Nom           idParent        numero_piste
----------------------------------------------------------
idTruc         Truc          null            5
idCache1       Cache1        idTruc          1
idCache2       Cache2        idTruc          2
 
Avec les numero_piste de 'Cache1' et'Cache2' étant les numéros d'ordre dans lesquels les chansons apparaissent
après la chanson 'Truc'.
 
Sachant que les pistes ne sont pas forcément enregistrées dans cet ordre en table, je ne peux pas faire d'ORDER BY
id pour les afficher correctement. J'aimerais que ma requête me rende les pistes de l'album
dans leur ordre de numero_piste croissant sachant que doivent apparaîtrent les pistes cachées juste après
leur piste parent, elles-même rangées par numero_piste. Le tout rangé par ordre d'entité (ici, face A, face B)
 
Ex de retour de requête :
 
numero_piste          id             nom            idParent          type          ordre_entité (face)
--------------------------------------------------------------------------------------------------------
1                     id_1           Chanson1       null              K7            A
2                     id_2           Chanson2       null              K7            A
3                     id_3           Chanson3       null              K7            A
4                     id_4           Chanson4       null              K7            A
5                     id_5           Chanson5       null              K7            A
1                     id_6           Chanson6       id_5              K7            A
2                     id_7           Chanson7       id_5              K7            A
6                     id_8           Chanson8       null              K7            A
7                     id_9           Chanson9       null              K7            A
8                     id_10          Chanson10      null              K7            A
9                     id_11          Chanson11      null              K7            A
1                     id_12          Chanson12      id_11             K7            A
10                    id_13          Chanson13      null              K7            A
11                    id_14          Chanson14      null              K7            A
12                    id_15          Chanson15      null              K7            A
1                     id_16          Chanson16      null              K7            B
2                     id_17          Chanson17      null              K7            B
3                     id_18          Chanson18      null              K7            B
......
 
Ca fait 2 jours que je me prends la tete et je n'y arrive pas !!
Merci d'avance pour votre aide.
 
Seb
 

Reply

Marsh Posté le 23-04-2008 à 12:39:18   

Reply

Marsh Posté le 23-04-2008 à 13:18:10    

Déjà pour la requête, on verra aprés pour l'ordre :

Code :
  1. SELECT A.numero_piste, A.id, A.nom, A.idParent, A.type, A.ordre_entité
  2. FROM TABLES A LEFT JOIN TABLES B
  3. ON A.id = B.idParent


 
POur l'ordre, je réfléchis...


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 23-04-2008 à 13:19:06    

Tu travailles sur quel SGBD ?


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 23-04-2008 à 13:24:49    

PEux être comme ca :  

Code :
  1. SELECT A.numero_piste, A.id, A.nom, A.idParent, A.type, A.ordre_entité
  2. FROM TABLES A LEFT JOIN TABLES B
  3. ON A.id = B.idParent
  4. ORDER BY ordre_entite,
  5.  (IF idParent = NULL THEN CONCAT(id,"_",0)
  6.   ELSE CONCAT(idParent,"_",id)
  7.  END IF)


 
mais je ne suis pas sur que ton SGBD aime le if dans l'ORDER BY, sinon tu peux essayer de mettre le if dans un champ avec un AS et de le rappeler dans l'ORDER BY

Code :
  1. SELECT A.numero_piste, A.id, A.nom, A.idParent, A.type, A.ordre_entité,
  2. (IF idParent = NULL THEN CONCAT(id,"_",0)
  3.   ELSE CONCAT(idParent,"_",id)
  4.  END IF) AS tri
  5. FROM TABLES A LEFT JOIN TABLES B
  6. ON A.id = B.idParent
  7. ORDER BY ordre_entite, tri



---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 23-04-2008 à 14:58:07    

babasss a écrit :

Tu travailles sur quel SGBD ?


 
MySQL :)
je continue de réfléchir

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed