[SQL]GROUPY BY - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : [SQL]GROUPY BY (/showthread.php?tid=1856) |
[SQL]GROUPY BY - Loetheri - 07-10-2007 Petit problème à propos d'une requête SQL sur un serveur MySQL ^^ J'ai une série d'entrées dans ma table contenant un id, un titre et un texte. Problème : je ne veux que le dernier élément par titre. J'utilise donc un GROUP BY titre. Seulement il me tire le premier élément et non le dernier comme je le souhaite. Code : SELECT id, titre, texte, COUNT(titre) AS nombre FROM blop GROUP BY titre ORDER BY id DESC Si ce n'est pas clair, dites-le. J'ai essayé de faire un ORDER BY titre et sur id avec et sans DESC. Le GROUP BY doit être sur le titre. RE: [SQL]GROUPY BY - Shiwa - 07-10-2007 Le GROUP BY sert à éliminer les doublons, il te permettra d'avoir un COUNT(titre) juste (et encore c'est pas sûr, il faudrait vérifier dans quel ordre mySQL effectue les opérations), mais n'effectuera aucun tri. D'ailleurs pour le COUNT, il semblerait qu'il existe un mot clé DISTINCT pour éliminer les doublons. Mieux vaut l'utiliser, ça me parait plus sûr. Si tu veux le dernier élément par titre, il faut un ORDER BY titre (et certainement pas un ORDER BY id). Tu peux rajouter un LIMIT 1 pour ne récupérer qu'un seul résultat (même si je ne sais pas si ça apporte grand chose si ton script PHP ne fait qu'un seul fetch_array). Essaie en remplaçant ta requête par les deux suivantes, à éxecuter et à analyser séparément, on y verra déjà plus clair si ça pose encore problème: Code : SELECT id, titre, texte FROM blop ORDER BY titre LIMIT 1 RE: [SQL]GROUPY BY - arcanis - 07-10-2007 Pour être sûr du dernier élément, je mettrais un ORDER BY `titre` DESC ou ORDER BY `titre`,`id` DESC Le LIMIT 1 servira surtout à optimiser le temps de traitement. Ca évitera à MySQL de parcourir toute la table (enfin je crois...je crois qu'il y a un article sur le SdZ qui en parle, quand ils ont fait leur migration vers PgSQL). RE: [SQL]GROUPY BY - Loetheri - 07-10-2007 Code : SELECT COUNT(DISTINCT titre) AS nombre FROM wiki Maintenant, si j'essaye de faire une requête regroupant et le nombre et les id et les textes, cela ne fonctionne pas. Je suis obligé de faire un GROUP BY. Je veux avoir le dernier id pour un même titre. Je ne cherche pas à limiter ma recherche. je veux tous les élements ayant un nom identique tout en sachant combien d'éléments ont un même nom et en récupérant le dernier id. En somme, pour être très clair, on peut considérer ces différentes entrées : Code : id - titre - texte Code : id - Titre - texte - nombre Or dans ma requête, j'ai : Code : id - Titre - texte - nombre Pour la requête SELECT id, titre, texte FROM blop ORDER BY titre, tout fonctionne normallement. Là n'est pas le problème. Je précise que je ne tiens pas à faire de multiples requêtes. RE: [SQL]GROUPY BY - Bob le Pointu - 07-10-2007 J'ai une solution, mais elle est assez lourde, mais elle fonctionne. Elle consiste à utiliser les sous-requêtes. Code : SELECT t1.id, Bon appétit. |