Trier et afficher le resultat d'une requête

Petit nouveau ! | 3 Messages

18 févr. 2008, 23:18

Bonjour,

J'espère poster au bon endroit dans le forum. En fait ma question est liée aux bases de donnée, mais c'est plutôt le PHP qui m'aidera... enfin je vous explique

Voilà j'utilise donc mysql

en gros... J'ai une table reprenant des promotions, un promotion à un titre, une explication, un flag informant si c'est une promo exceptionnelle et une colonne m'informant à qui s'adresse cette promotion (hotel, restaurant, bar)
Chacun client une fois identifié va aller dans la section promo de mon site et là il doit voir en premier les promo Exceptionnelle qui s'adresse à son secteur (hotel par exemple), ensuite les promos Except. des autres secteurs ensuite les promo classique de son secteur et enfin les autres promo.
Ex : un client x travaillant pour un hotel va sur promotion

Dans ma table j'ai

Titre 1 - Texte 1 - Except - Restaurant
Titre 2 - Texte 2 - Non - Hotel
Titre 3 - Texte 3 - Non - Restaurant
Titre 4 - Texte 4 - Except - Hotel

Je voudrais donc que les promotions s'affichent dans cet ordre

Titre 4 - Texte 4 - Except - Hotel
Titre 1 - Texte 1 - Except - Restaurant
Titre 2 - Texte 2 - Non - Hotel
Titre 3 - Texte 3 - Non - Restaurant

Voilà donc ma question... il y a t'il moyen de faire ca en sql... je ne pense pas... ok premier tri je le fais sur le flag et j'aurai en priorité mes Exceptionnelle...

Ensuite en fait il faudrait que je puisse passer à travers les résultats, afficher en premier les Except Hotel puis les autres Except ensuite les Non - Hotel...

Avez-vous une idée de la façon de faire... Bon j'ai bien une idée à l'aide d'un tableau, des recherches,... et puis à nouveau réafficher à travers le tableau mais même là je planche. Il y aurait-il une fonction que je ne connaisse pas permettant ce genre de truc ?

MErci de votre aide

Seb

ViPHP
ViPHP | 2144 Messages

19 févr. 2008, 00:59

Tu peux tout à fait trier sur plusieurs colonne à la fois avec l'instruction sql order by.

http://sql.1keydata.com/fr/sql-order-by.php

Invité
Invité n'ayant pas de compte PHPfrance

19 févr. 2008, 07:46

Hello,

Oui bien sûr mais mon problème est que j'ai 5 valeurs différentes dans ma deuxième colonne... bref trier par ordre ne m'aide pas beaucoup,.. j'explique

J'ai Restaurant / Bar / Hotel / ...

Le tri me donnera Bar / Hotel / Restaurant

Et moi j'aimerais en fait afficher TOUTES ces promos définies comme exceptionnel mais en premier les promotions liées aux HOTEL (bref au milieu de ma liste de résultat).

Sachant les différensts valeurs potentielles de ma colonne, s'il était possible de dire de la trier par order de ces valeurs (et ensuite lui donner un tableau ordonné comme je le veux ca serait génial... Je vais aller réétudier le SQL mais je ne pense pas que c'est possible)

Merci en tout cas de ton aide

d0m
Mammouth du PHP | 1141 Messages

19 févr. 2008, 10:05

Coté SQL je ne suis pas assez calé pour un tri de cette sorte.

Par contre en PHP, il suffit de bien concevoir et d'ordonner tes données.
Pour cela tu peux utiliser les tableaux associatifs multidimensionnels :

Après exécution de ta requête SQL, tu ranges tes résultats par catégories.
Le but étant d'obtenir un tableau de ce type :

Code : Tout sélectionner

array( 'bar' => array(0=>enregistrement1, 1=> enregistrement2;...) , 'hotel' => array(0=>enregistrement3, 1=> enregistrement4;...) , ... )
Disons que bar, hotel ,... est le champ categorie :
$promotions = array();
while($ligne = mysql_fetch_assoc($resultat)){
  $promotions[$ligne['categorie']][] = $ligne;
}
Il te suffira ensuite d'accéder aux promotions bar à travers le tableau
$promotions['bar']

Petit nouveau ! | 3 Messages

19 févr. 2008, 12:07

Merci pour ton aide... je vais réfléchir à ce système de tableau.. ca pourrait effectivement solutionner mon problème. Je dois juste vérifier si je n'ai pas des exceptions qui pourrait faire planter ce genre de recherche (style : plusieurs promotions exceptionnelles de type Bar) ca ne devriat pas exister mais bon on est jamais à l'abris d'une erreur client.

Si jamais quelqu'un avait une solution SQL ca m'intéresserait égalemnet... j'avais pensé à un truc du style (pure fiction mais il existe pê quelque chose qui le permette)

Select * from PROMO order by ... et lui donner un tableau qui donne l'ordre de tri style

Select * from PROMO order by $categorie["Hotel","Bar","Restaurant",...]

et là il ordonnerait la requête par l'ordre défini dans le tableau categorie... bon je rêve probablement..;

seb

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

19 févr. 2008, 13:15

As tu regardé du côté de GROUP BY ?
http://dev.mysql.com/doc/refman/5.0/fr/ ... fiers.html
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

ViPHP
ViPHP | 5924 Messages

19 févr. 2008, 14:03

Bah avec Order by, c'est possible :

Code : Tout sélectionner

ORDER BY champ1 ASC, FIELD(champ2, 'Hotel', 'Bar', 'Restaurant') ASC
avec champ1 : Except et Non
et champ2 : Hotel, Bar, Restaurant…

Petit nouveau ! | 3 Messages

19 févr. 2008, 14:05

YEs... si ca fonctionne c'est exactement ce qu'il me faut !!!!

Je teste ca ce soir et vous dit quoi !!!!

THANKS