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

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 ?
