Page 1 sur 1

Tri d'une requette

Posté : 05 août 2005, 13:32
par NoNos
Bonjour

Je vais essayer d'etre clair

Dans ma base de donnés j'ai les champs numlivre, titre, auteur, je souhaiterai extraire les 30 derniers enregistrements ce que je fais grace a cette requete :

Code : Tout sélectionner

SELECT numlivre, titre FROM Livres ORDER BY 'numlivre' DESC LIMIT 0,30
cela marche bien.

Maintenant je souhaiterai compliquer en changeant l'ordre et trié par titre mais j'obtiens alors les 30 derniers titres dans l'ordre alphabétique et non pas les 30 derniers enregistrements saisi

J'ai pensé utilisé une autre table que je met regulièrement à jour avec les 30 dernier livre mais cette solution me semble etre un peu complexe.

Posté : 05 août 2005, 13:58
par raptor
Ta version de mysql accepte t'elle les sous-requetes ?
Quelle version as tu ?

Posté : 05 août 2005, 14:04
par NoNos
MySQL 4.1.13

Elle vien d'etre remise a jour par free donc je supose qu'ils ont fait le nécessaire pour les sous-requetes

Posté : 05 août 2005, 14:09
par raptor

Code : Tout sélectionner

SELECT numlivre,titre FROM livres l1 INNER JOIN (SELECT numlivre AS numlivre2 FROM livres l2 ORDER BY numlivre DESC LIMIT 30) l2 ON l2.numlivre2 = l1.numlivre ORDER BY l1.titre ASC

Essaye cette requete.
Je l'ai tapé à la vollée, donc pas testée :)

Posté : 05 août 2005, 14:13
par NoNos
Merci sa marche je vais mettre resolu de ce pas mais tu pourai m'expliquer un peu la requete car j'ai pas tous compris

Posté : 05 août 2005, 14:14
par raptor
Alors en fait je fais une sous requete pour lui demander les 30 derniers enregistrés, et je recupère les infos des livres dont le numero est dans cette sous-requete.

Posté : 05 août 2005, 14:25
par NoNos
C'est trop cool sa marche sa fesai quelques jour que je galéré et vu que je ne sais pas faire de sous requete sa marché pas, va faloir que je m'y mette.

Posté : 10 août 2005, 15:52
par NoNos
J'arive pas a rajouter une clause WHERE a cette requette :
SELECT numlivre, titre, auteur, description, editeur FROM Livres L1 
INNER JOIN (SELECT numlivre AS numlivre2 FROM Livres L2 ORDER BY numlivre DESC LIMIT 30) L2 ON numlivre2 = numlivre  ORDER BY ".$ordre." LIMIT 0, 30
Je ne sais pas trop ou placer mon WHERE donc si quelqu'un peut m'aider c'est cool

Posté : 10 août 2005, 15:58
par Cyrano
Précises ce que tu veux faire: le WHERE peut être sur la requête ou la sous-requête.

Posté : 10 août 2005, 16:04
par NoNos
Je ne sais pas exactement ou il faut que je le mette, je connais pas trop les sous requette c'est la première que j'utilise et j'etudie.

En fait je vais exposer mon problème, j'ai une base contenant des livre et je ve recupérer les livres qui on le titre passer dans une variable a l'aide d'un formulaire. Ici la sous-requette me permet juste de trier les resultat par titre ou auteur

Re: Tri d'une requette

Posté : 10 août 2005, 17:44
par albat
je souhaiterai (...) trier par titre mais j'obtiens alors les 30 derniers titres dans l'ordre alphabétique et non pas les 30 derniers enregistrements saisis.
Pas de problème !
J'ai pensé utilisé une autre table que je met regulièrement à jour avec les 30 dernier livre mais cette solution me semble etre un peu complexe.
C'est hyper complexe, lourd et ch... à mettre à jour.
Pourquoi se compliquer la vie ???

Code : Tout sélectionner

SELECT numlivre, titre FROM (SELECT numlivre, titre FROM Livres ORDER BY numlivre DESC LIMIT 0,30) ORDER BY titre