Salut,
j'ai un petit soucis avec MySQL, ma table (c'est le cache des statistiques pour mon outil de traduction) :
|-- section --|-- language --|-- date --|-- value --|
ce que je voudrais c'est récupérer uniquement les enregistrements recents, sans possibilité de connaitre le nombre d'enregistrement (ORDER BY date LIMIT x ne peut pas convenir)
pour le moment j'ai ceci
SELECT * FROM ( SELECT * FROM '.STATS_TABLE.' ORDER BY date DESC ) as t GROUP BY CONCAT(t.section, t.language);
qui fonctionne mais je sais pas trop ce que ça donne question performances vu qu'il y a une sous requete qui renvoie tous les résultats...
Hors ligne
Je ne vois pas cette table dans la base, mais je dirais que ceci devrait marcher aussi bien :
SELECT * FROM '.STATS_TABLE.' GROUP BY section, language ORDER BY date DESC ;
Mais ça me semble tellement simple comme réponse que je pense ne pas saisir la difficulté.
De plus, le besoin d'optimisation ne doit se faire que si c'est nécessaire. Si la table "stats" fait 1k lignes, ce n'est pas la peine de se prendre la tête, même une requête mal optimisée ne posera aucun soucis.
Hors ligne
il faut que j'essaye mais ce que dont j'ai peur c'est que comme on fait le GROUP BY avant le ORDER BY on obtienne pas forcement les entrées récentes
Hors ligne
mistic100 a écrit:
il faut que j'essaye mais ce que dont j'ai peur c'est que comme on fait le GROUP BY avant le ORDER BY on obtienne pas forcement les entrées récentes
Ah ben oui, tu as tout à fait raison. MySQL va te laisser faire cette requête mais va te prendre une date au hasard.
En revanche, si tu fais un :
SELECT section, language, max(date) as max_date FROM table GROUP BY section, language ORDER BY max_date DESC ;
là c'est mieux sans doute.
Hors ligne