Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels 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 09/12/2010, 15h20   #1
Membre à l'essai
 
Inscription : mars 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 48
Points : 24
Points : 24
Par défaut ORDER BY problematique

Bonjour.

Ma structure est approximativement la suivante (j'ai enlevé tt ce qui n'a pas de rapport avec mon problème actuel):

Code :
1
2
3
4
5
6
CREATE TABLE IF NOT EXISTS `comment` (
  `comment_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `parent_id`bigint(20) DEFAULT NULL,
  `comment_date` datetime DEFAULT NULL,
  PRIMARY KEY  (`comment_id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
Je désirerais, en une requête, une seule, obtenir tous les commentaires du plus récent au plus anciens. Pour les commentaires avec enfants, je désirerais que les enfants succèdent au parent, du plus ancien au plus récent (dc dans l'ordre dans lequel ils ont été postés). Évidemment, chaque ligne n'apparait qu'une fois.

Par exemple, sur le site de libération, ils font ça très bien:
http://www.liberation.fr/monde/01022...nger-wikileaks

Est-ce en une requête? Plusieurs? Je l'ignore, mais, au final, j'aimerais que mon ORDER BY soit le même.

Merci d'avance pour votre aide.
danidan75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 15h35   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 974
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 974
Points : 18 216
Points : 18 216
Envoyer un message via MSN à CinePhil
Qu'as-tu essayé comme requête ?
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 16h09   #3
Membre à l'essai
 
Inscription : mars 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 48
Points : 24
Points : 24
J'en suis à

Code :
1
2
3
SELECT co.*
FROM `comment` co
ORDER BY IF(co.parent_id IS NOT NULL, co.parent_id, co.comment_id), co.comment_date
Ça m'a l'air de faire ce que je voudrais jusqu'au niveau 2, mais pour des dialogues à 18 niveaux imbriqués, je ne suis pas sûr, mais alors pas du tout.
danidan75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 16h18   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 974
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 974
Points : 18 216
Points : 18 216
Envoyer un message via MSN à CinePhil
Le problème c'est qu'effectivement tu ne sais pas à l'avance combien il y a de niveaux.
Je crois que ce genre de problème se résoud normalement par une requête récursive... que ne connait pas MySQL !
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 19h42   #5
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 948
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 948
Points : 17 762
Points : 17 762
Il est impossible de faire cela en une seule requête sous MySQL. En effet, MySQL n'implémente pas les requêtes récursives qui sont normalisées depuis 1999...
Bref, changez de SGBDR !
A lire sur les requêtes récursives : http://sqlpro.developpez.com/cours/s...te-recursives/
A lire sur les "manques".... de MySQL : http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 22h44   #6
Membre à l'essai
 
Inscription : mars 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 48
Points : 24
Points : 24
Pas de requête récursive, donc impossible en une requête unique. Soit.

Et, selon vous, la solution la plus optimisée, en plusieurs requêtes, ce serait...?
danidan75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 23h33   #7
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 948
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 948
Points : 17 762
Points : 17 762
Il n'y en as pas de solution optimisée, parce que par nature on ne peut pas faire du récursif sans récursivité !!!!
Sachez qu'on dit d'un langage informatique qu'il est "turing complet" lorsque notamment il permet la récursivité. Cette fonctionnalité est essentielle pour résoudre tout problème mathématique lorsqu'il existe un algorithme de résolution.
Le langage SQL est Turing complet, mais MySQL ne sait toujours pas faire cela contrairement à PostGreSQL par exemple, mais aussi Oracle, DB2, SQL Server...

Alors parler en sus d'optimisation me fait doucement rigoler !!! Seuls des bricolages ineptes, incomplet et contre performants peuvent être réalisé dans ce genre de cas !

Bref, si vous voulez de la performance, optez pour un vrai SGBDR !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web