CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

MYSQL: Order By parent -> child

venez
venez
Niveau 9
02 septembre 2013 à 17:43:00

Salut :hap:

J'ai une table du style :

id|name     |parent_id
1 |Cat1       | 0
2 |Cat2       | 0
3 |Cat3       | 0
4 |Child1.1| 1
5 |Child1.2| 1
6 |Child2.1| 2
7 |Child3.1| 3

et je souhaiterai spécifier un ordre précis dans ma requete pour que les résultats s'affiche comme ceci :

id|name       |parent_id
1 |Cat1       | 0
4 |Child1.1| 1
5 |Child1.2| 1
2 |Cat2       | 0
6 |Child2.1| 2
3 |Cat3       | 0
7 |Child3.1| 3

C'est possible depuis UNE requête de type $sql = "SELECT ... FROM table ORDER BY ..." ?

Merci d'avance :hap:

godrik
godrik
Niveau 30
02 septembre 2013 à 18:16:35

Non, je ne pense pas que ca soit possible. Il faudra faire ton tri dans l'application.

Schiffer
Schiffer
Niveau 10
02 septembre 2013 à 18:35:32

Mauvaise conception des tables!

godrik
godrik
Niveau 30
02 septembre 2013 à 19:12:14

Schiffer, pourquoi est ce que c'est une mauvaise conception des tables? Deja il n'y a qu'une seule table et elle est en forme normale. Le probleme qu'a l'auteur est qu'il encode un arbre dans une base de donnee et qu'il veut faire un DFS dessus. Et ces choses la se passent typiquement mal.

Si tu avais une table (parent,enfant). Ca n'aiderai pas beaucoup plus. Tu gagnerais un peu de perf lors de la traverse parceque l'indexation sur parent donnerait un peu de localite, mais c'est tout.

Schiffer
Schiffer
Niveau 10
02 septembre 2013 à 22:17:47

C'est encore pire donc, il faudrait faire le traitement niveau application comme t'as dit!

thegodfather4
thegodfather4
Niveau 10
05 septembre 2013 à 02:56:19

+1 vdd en tout cas se sera le plus simple mais pas forcement le plus performant :ok:

venez
venez
Niveau 9
05 septembre 2013 à 13:30:38

Je reviens assez tard sur la question, merci à ceux qui on répondu :oui:
Mais j'ai trouvé une solution qui permet de le faire en une simple requête :

SELECT Concat(If(isnull(p2.name),'',Concat('/',p2.name)),
'/',p1.name)
as `gen_order`, p2.name as `Parent name`, p1.*
FROM table p1 LEFT JOIN table p2 on p1.parent_id = p2.id order by `gen_order`

[-ArK-]
[-ArK-]
Niveau 30
05 septembre 2013 à 16:38:34

J'avais eu un exercice similaire en DUT, j'avais jamais réussi :(

Merci d'avoir posté la solution :hap:

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware