order by

Mammouth du PHP | 620 Messages

05 sept. 2010, 17:43

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)

Eléphanteau du PHP | 10 Messages

05 sept. 2010, 21:29

Code : Tout sélectionner

Order by name
non?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 sept. 2010, 21:39

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
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 620 Messages

05 sept. 2010, 21:40

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.

Eléphant du PHP | 55 Messages

05 sept. 2010, 21:43

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.

Mammouth du PHP | 620 Messages

05 sept. 2010, 21:51

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............

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 sept. 2010, 22:02

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, .. ?)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 620 Messages

05 sept. 2010, 22:06

non c'est bon sa fonction merci (j'ai édité mon message).

Merci Ryle pour ton aide. On apprend bien avec phpfrance. Merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 sept. 2010, 22:58

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'], ...

}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...