Page 1 sur 1
order by
Posté : 05 sept. 2010, 17:43
par fabrice88250
Bonjour,
j'ai un requete :
SELECT * FROM IWlocations ORDER BY type DESC, prix ASC
je voudrai choisir l'ordre de type pour l'affichage.
C'est a dire type contiend ces valeurs : studios, f1, f2, f3,...., garage,...
comment dans ma requette dire que je veu en premier par exemple studios , puis en 2 f1, puis ..... au lieu du desc qui classe par ordre croissant ou decroissant (asc ou desc)
Re: order by
Posté : 05 sept. 2010, 21:29
par igor206
Re: order by
Posté : 05 sept. 2010, 21:39
par Ryle
L'instruction order by ne permet que de trier par ordre croissant ou décroissant. Dans le cas d'une chaine de caractère, le tri se fait par ordre alphabétique. Mais tu ne peux pas lui imposer un tri particulier...
Pour faire ce que tu veux, le plus simple c'est probablement d'ajouter un champ dans ta base qui te permettra de servir de clé de tri.
Une autre solution pourrait consister à jouer avec les conditions case/when de mysql, et associer un ordre à chaque type. Tu peux ainsi créer une colonne qui te servira pour le tri :
SELECT CASE WHEN type = 'studio' THEN 1 WHEN type = 'f2' THEN 2 ... END AS tri
, type, prix, ....
FROM IWlocations
ORDER BY tri
Re: order by
Posté : 05 sept. 2010, 21:40
par fabrice88250
je pense pas car je n'ai pas de champs 'name' et je veux un ordre bien definit. pas un ordre croissant ou decroissant ou alphabetique ou...
un ordre bien definit.
ok ryle je vais essayé cette methode de tri sinon j'ajouterai un champ dans ma base.
Re: order by
Posté : 05 sept. 2010, 21:43
par Ganesh
Bonsoir,
Les solutions proposées par Ryle pourront te permettre d'effectuer le tri que tu désires.
Une autre solution est d'utiliser le typage du champ sur lequel tu désires faire le tri; grâce au
type ENUM, tu pourras ordonner tes lignes en fonction de ce champ en suivant l'ordre défini lors de la définition de ce champ.
Re: order by
Posté : 05 sept. 2010, 21:51
par fabrice88250
je viens d'essayé la solution de Ryle mais je n'ai du coup plus aucunes données qui s'affichent.
Non c'est bon désolé erreur de majuscule et du coup rien ne s'affichait.
par contre comment puis-je faire pour qu'a chaque chamgement de type au niveau de mon affichage j'ai le type qui soit mis en evidence.
par exemple :
Studio:
sudio1, studio2...
F1 :
f11, f12....
car là sa s'affiche comme ça :
sudio1, studio2... f11, f12....f2, f3............
Re: order by
Posté : 05 sept. 2010, 22:02
par Ryle
Un message d'erreur ?
Est-ce que ta requête fonctionne quand tu l'exécutes directement avec mysql ou dans phpmyadmin ?
Comment traites tu le résultat de la requête ? (fetch_row, fetch_assoc, .. ?)
Re: order by
Posté : 05 sept. 2010, 22:06
par fabrice88250
non c'est bon sa fonction merci (j'ai édité mon message).
Merci Ryle pour ton aide. On apprend bien avec phpfrance. Merci.
Re: order by
Posté : 05 sept. 2010, 22:58
par Ryle
Pour la gestion des catégories, puisque ta liste est triée par type, tu peux le faire en utilisant une variable temporaire qui va contenir la catégorie courante. Il te suffit alors de ne l'afficher que lorsqu'elle change :
$typeEnCours = '';
while ($row = mysql_fetch_assoc(...) ) {
if ($typeEnCours != $row['type']) {
echo '<h1>' . $row['type'] . '</h1>';
$typeEnCours = $row['type'];
}
echo $row['nom'], ...
}