Trie des résultats d'une requette

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Trie des résultats d'une requette

par Cyrano » 16 mai 2005, 21:58

Tu as la fonction sort() qui te sera utile tout comme éventuellement la fonction asort(), explore-les dans le manuel, tu vas certainement trouver une sérieuse piste de solution en attendant que free.fr mette MySQl 4.1 en ligne

par NoNos » 16 mai 2005, 20:49

Je ne voi pas du tout comment utilisé les fonction de tri sa serai cool de préciser un peu car la je pietine un peu

par NoNos » 16 mai 2005, 19:22

La solution du tableau me parrai bonne il me reste plus qu' chercher les fonctions dont tu parle

par Cyrano » 16 mai 2005, 19:16

Alors la seule solution que je vois, c'est de récupérer le résultat des trente derniers enregistrement dans un tableau indexé et d'utiliser les fonction de tri de tableau pour l'afficher dans l'ordre souhaité.

Autre méthode, créer une table temporaire dans laquelle tu stockes les 30 derniers enregistrements et tu fais ensuite des requêtes dans cette table temporaire avec l'ordre de tri que tu veux.

par NoNos » 16 mai 2005, 18:40

Ma base de données est hebergée chez free et la version de mysql est la 4.0.22 donc pour les sous requettes c mort.

par Cyrano » 16 mai 2005, 18:36

comme ça c'est mieux:
SELECT b.numlivre, b.titre, b.auteur, b.description, b.editeur,
b.année, b.taille, b.etat, b.detail, b.estimation, b.numero_theme
FROM Livres as a 
CROSS JOIN Livres as b
WHERE ".$critère."
GROUP BY b.numlivre
HAVING numlivre > ( max( a.numlivre ) - 30 )
ORDER BY ".$ordre."
n'oubli pas de mettre les alias 'b' sur les clauses where et order by.
Pas convaincu : si une des dernières titres inscrit a été effacé pour une raison x ou y, ton (MAX(a.numlivre) - 30) ne retournera pas 30 mais 29 résultats.

Faire ça en une seule requête sans pouvoir faire de requêtes imbriquées, ça pose un problème... je n'ai pas trouvé la solution autrement qu'en le faisant par programmation sur un simple ORDER BY des derniers enregistrements.

par Invité » 16 mai 2005, 18:06

thierry tu pourais m'expliquer un peu ta solution je comprend pas comment tu as raisonner.

Malheureusement ta solution ne marche pas peu etre que c'est parce qu'il peut y avoir des trou dans ma clé

par thierry » 16 mai 2005, 17:23

comme ça c'est mieux:
SELECT b.numlivre, b.titre, b.auteur, b.description, b.editeur,
b.année, b.taille, b.etat, b.detail, b.estimation, b.numero_theme
FROM Livres as a 
CROSS JOIN Livres as b
WHERE ".$critère."
GROUP BY b.numlivre
HAVING numlivre > ( max( a.numlivre ) - 30 )
ORDER BY ".$ordre."
n'oubli pas de mettre les alias 'b' sur les clauses where et order by.

par thierry » 16 mai 2005, 16:53

je vient de m'apercevoir que j'aifait une grosse erreur de logique alors ne prend pas en considération mon post :oops:

par albat » 16 mai 2005, 16:25

Il semble ne pas accepter la sous requette
Quelle version de MySQL utilises-tu ?
Les requêtes imbriquées sont acceptés à partir de la 4.1.
http://dev.mysql.com/doc/mysql/fr/subqueries.html

par thierry » 16 mai 2005, 16:19

salut,

toujours en supposant que ta clef primaire num_livre est auto incrémentée.

essaie ça:
SELECT numlivre, titre, auteur, description, editeur,
année, taille, etat, detail, estimation, numero_theme
FROM Livres 
WHERE ".$critère."
GROUP BY numlivre
HAVING numlivre > ( max( numlivre ) - 30 )
ORDER BY ".$ordre."
thierry

par NoNos » 16 mai 2005, 15:27

Il semble ne pas accepter la sous requette mais c'était pas con comme idées

Re: Trie des résultats d'une requette

par albat » 16 mai 2005, 14:48

Code : Tout sélectionner

SELECT * FROM (SELECT numlivre, titre, auteur, estimation FROM Livres ORDER BY num_livre DESC LIMIT 0, 30) ORDER BY estimation DESC

par NoNos » 16 mai 2005, 14:36

ceux sont les dernier saisis

par albat » 16 mai 2005, 14:34

Qu'appelles-tu "derniers enregistrements" ?
Les plus récents (cad derniers saisis) ou les plus chers, les moins chers ?