order by et 2 colonne

profuz
Invité n'ayant pas de compte PHPfrance

14 févr. 2005, 02:29

Bonjour,

voici un petit problème que je n'ai jamais rencontrer. J'ai 2 colonne prix... une prix_original et une nouveau_prix.

Si il n'y a pas de nouveau prix, le nouveau prix s'enregistre à 0.00

J'aimerais dans ma requete select mettre les prix en ordre croissant avec un
order by
mais comment le faire avec 2 colonne...
order by 'prix_original','nouveau_prix' ASC
...qu'il vérifi si nouveau_prix n'est pas egale a 0.00 et qu'il est plus petit que prix_original et les tri en ordre croissant

Eléphant du PHP | 67 Messages

16 févr. 2005, 15:05

Il n'y a pas de méthode pour faire ce que tu demande :(

Malheureusement MySQL ne peut pas effectuer de trie sur 2 critères..

Tu as deux solution :

- Soit tu fait ton trie manuellement avec PHP tu le trie dans un tableau et tu le recrache apres page a page (ca va etre cho mais c faisable)

- Soit tu change la structre de ta table pour n'avoir qu'un seul champ sur lequel faire le trie ! Solution que j'adopterai et que je vais t'expliquer :

Admetont que tu parle de produit ta table actuelle est donc de typé :

Code : Tout sélectionner

Produit{ id PK... prix_original float ... nouveau_prix float... ... } Moi je te propose ca : Produit { id PK prix_a_afficher float... prix_original float... nouveau_prix float... [...] }
Il te suffit de stocker le bon prix_a_afficher et de faire le trie dessus ensuite en fonction de tes deux champs qui existait deja tu vera pour le formatage ;)

++

ViPHP
ViPHP | 1024 Messages

16 févr. 2005, 15:42

avec un WHERE peut être?

définit exactement ce que tu veux afficher et ce que tu veux trier, après tu pourras faire la requete.

A+

Pascal

Eléphant du PHP | 67 Messages

18 févr. 2005, 14:33

Il me vient une idée lol mais j'ai jamais testé sur mysql (c'est une commande oracle)

Code : Tout sélectionner

select GREATEST(nouveau_prix, prix_original) AS chere, LEAST(nouveau_prix, prix_original) AS paschere from produit where... order by paschere;
A mon avis ca devrait passer ;)