Page 1 sur 2

Order By un peu spécial !

Posté : 03 avr. 2006, 10:11
par Mamouth
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

Posté : 03 avr. 2006, 10:16
par Ziwa
et pourquoi pas un where? =)

Posté : 03 avr. 2006, 10:21
par Tictac
SELECT * FROM products ORDER BY prices , mark ASC;

tout simplement

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

Posté : 03 avr. 2006, 10:28
par Mamouth
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

Posté : 03 avr. 2006, 10:32
par Tictac
comme toi tu fais mario , il va juste sortir les prix pour la marque sony ;)

lui veut tout les prix mais sony en premier

Posté : 03 avr. 2006, 10:36
par Ziwa
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

Posté : 03 avr. 2006, 10:38
par mario
SELECT * FROM products WHERE mark='SONY'
UNION
SELECT * FROM products


sort les produits de marque SONY en tête

Posté : 03 avr. 2006, 10:45
par Tictac

Posté : 03 avr. 2006, 10:55
par Mamouth
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

Posté : 03 avr. 2006, 11:01
par Tictac
Essaye comme ceci =>
$ids = mysql_query("(SELECT * FROM products WHERE mark='SONY') UNION (SELECT * FROM products) ORDER BY prices");  

Posté : 03 avr. 2006, 11:15
par Mamouth
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))

Posté : 03 avr. 2006, 11:17
par ouckileou
Est-ce que c'est Résolu ?

Je déplacerai aussi le sujet dans le forum BDD

Posté : 03 avr. 2006, 11:36
par Mamouth
Problème résolu !

MERCI :lol:

Posté : 03 avr. 2006, 16:13
par Hubert Roksor
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

Posté : 03 avr. 2006, 16:54
par Cyrano
J'aurais une meilleure solution à proposer
Ça marche sur des versions inférieures à 5.0 ça ? :shock: