Tri d'une requette

Eléphant du PHP | 147 Messages

05 août 2005, 13:32

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.

Mammouth du PHP | 543 Messages

05 août 2005, 13:58

Ta version de mysql accepte t'elle les sous-requetes ?
Quelle version as tu ?

Eléphant du PHP | 147 Messages

05 août 2005, 14:04

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

Mammouth du PHP | 543 Messages

05 août 2005, 14:09

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 :)

Eléphant du PHP | 147 Messages

05 août 2005, 14:13

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

Mammouth du PHP | 543 Messages

05 août 2005, 14:14

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.

Eléphant du PHP | 147 Messages

05 août 2005, 14:25

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.

Eléphant du PHP | 147 Messages

10 août 2005, 15:52

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

Mammouth du PHP | 19672 Messages

10 août 2005, 15:58

Précises ce que tu veux faire: le WHERE peut être sur la requête ou la sous-requête.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 147 Messages

10 août 2005, 16:04

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

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

10 août 2005, 17:44

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