Order By un peu spécial !

Mamouth
Invité n'ayant pas de compte PHPfrance

03 avr. 2006, 10:11

Bonjour je bloque depuis un bon moment sur mon script avec un oder by un peu special.

Mon script : SELECT * FROM products ORDER BY prices

mon but etant de bien classer mes produits par prix, mais je voudrais ajouter une priorité au produits de tel ou tel marque, du type :

SELECT * FROM products ORDER BY prices PRIORITY (mark='SONY')

Mais bien entendu cela ne fonctionne pas.

Merci de votre aide

Ziwa
Invité n'ayant pas de compte PHPfrance

03 avr. 2006, 10:16

et pourquoi pas un where? =)

Eléphant du PHP | 353 Messages

03 avr. 2006, 10:21

SELECT * FROM products ORDER BY prices , mark ASC;

tout simplement

=> http://dev.mysql.com/doc/refman/5.0/fr/ ... ation.html

Mamouth
Invité n'ayant pas de compte PHPfrance

03 avr. 2006, 10:28

L'histoire c'est que je veus sortir TOUS les produits de TOUTES les marques, mais mettre en tête les produits de la marque SONY.

Désolé si je ne suis pas clair

Eléphant du PHP | 353 Messages

03 avr. 2006, 10:32

comme toi tu fais mario , il va juste sortir les prix pour la marque sony ;)

lui veut tout les prix mais sony en premier

Ziwa
Invité n'ayant pas de compte PHPfrance

03 avr. 2006, 10:36

Attend tu ne veux pas sortir tout les produits de toutes les marques? ou tu veux tout les produits? ta phrase est contradictoire avec ton mais


Si tu veux les produits de la marque sony par odre croissant ou decroissant de prix
Select * from PRODUITS where marque="SONY" order by prices ASC/DESC

Mammouth du PHP | 768 Messages

03 avr. 2006, 10:38

SELECT * FROM products WHERE mark='SONY'
UNION
SELECT * FROM products


sort les produits de marque SONY en tête
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphant du PHP | 353 Messages

03 avr. 2006, 10:45


Mamouth
Invité n'ayant pas de compte PHPfrance

03 avr. 2006, 10:55

Merci Mario, et merci à vous tous de votre rapidité !
j'ai testé le union, mais je dois mal l'utiliser :

$ids = mysql_query("SELECT * FROM products WHERE mark='SONY' ORDER BY prices UNION SELECT * FROM products ORDER BY prices");
while($ids_tab = mysql_fetch_array($ids))

merci

Eléphant du PHP | 353 Messages

03 avr. 2006, 11:01

Essaye comme ceci =>
$ids = mysql_query("(SELECT * FROM products WHERE mark='SONY') UNION (SELECT * FROM products) ORDER BY prices");  

Mamouth
Invité n'ayant pas de compte PHPfrance

03 avr. 2006, 11:15

C'est ok, ca fonctionne, mais le script exact etait :

$ids = mysql_query("(SELECT * FROM products WHERE mark='SONY' ORDER BY prices) UNION (SELECT * FROM products ORDER BY prices)");
while($ids_tab = mysql_fetch_array($ids))

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

03 avr. 2006, 11:17

Est-ce que c'est Résolu ?

Je déplacerai aussi le sujet dans le forum BDD

Mamouth
Invité n'ayant pas de compte PHPfrance

03 avr. 2006, 11:36

Problème résolu !

MERCI :lol:

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

03 avr. 2006, 16:13

J'aurais une meilleure solution à proposer, celle-ci:

Code : Tout sélectionner

SELECT * FROM products ORDER BY (mark = 'SONY') DESC, price ASC
Normalement, (mark = 'SONY') équivaut à 1 ou 0 selon si c'est vrai ou faux. Au fait, pour info "marque" se traduit par "brand" ;)

On peut étendre la technique à plusieurs marques si nécessaire, et ajouter une sorte de mini-classement supplémentaire. Par exemple, les appareils SONY en premier, puis TOSHIBA:

Code : Tout sélectionner

SELECT *, CASE mark WHEN 'SONY' THEN 2 WHEN 'TOSHIBA' THEN 1 ELSE 0 END AS rank FROM products ORDER BY rank DESC, price ASC

Mammouth du PHP | 19672 Messages

03 avr. 2006, 16:54

J'aurais une meilleure solution à proposer
Ça marche sur des versions inférieures à 5.0 ça ? :shock:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: