Order by php et mysql

Fermé
Rom190686 Messages postés 436 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 20 novembre 2015 - 16 déc. 2009 à 14:37
Rom190686 Messages postés 436 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 20 novembre 2015 - 16 déc. 2009 à 21:13
Bonjour,
Dans le but de rendre mon site dynamique, je voudrais offrir au visiteur la possibilité de trier les données affichée.
Explication :
Lors de l'affichage de la page, une requête sql affiche le contenu de la base de donnée.
Cette bd recense des événements donc, des lieux, des dates et des heures....
Une fois le contenu de la page affichée, je voudrais que le visiteur puisse classer les données par date ou bien par lieu.
Comment dois-je faire pour cela?
Est-ce possible en php?
Merci d'avance...
A voir également:

8 réponses

dam75 Messages postés 1041 Date d'inscription lundi 4 mai 2009 Statut Webmaster Dernière intervention 21 février 2023 67
16 déc. 2009 à 14:56
Bonjour,

Il y a 3 manières de faire cela :
1/ Dans la requête SQL : ajotuer une clause ORDER BY
Doc officielle pour MySQL : http://dev.mysql.com/doc/refman/5.0/fr/select.html
Les + :
- permet de trier l'ensemble des résultats, indépendamment de la "page" (généralement obtenue par une clause LIMIT) courante
Les - :
- la requête SQL devient variable en fonction du champ de tri, il y a donc du code un (tout petit peu) "compliqué" à rajouter : form HTML ou paramètres GET, ...
- Le tri est limité aux champs de la requête
- les performances peuvent chuter sur un grand nombre de lignes et/ou une requête complexe (sous-requêtes, jointures, ...)

2/ Dans le code PHP : voir les fonctions array_sort, ...
Les + :
- performant sur un petit (<1000) nombre de lignes,
- Le tri peut être très complexe (expressions mathématiques, voire données externes, ...)
Les - :
- Idem 1/
- ne permet généralement de trier QUE les résultats de la page courante

3/ En Javascript (donc côté client) : de nombreuses librairies permettent cela nativement, voir par exemple https://kryogenix.org/code/browser/sorttable/
Les + :
- TRES simple à implémenter, généralement une ligne de JS dans le code suffit
- le tri est fait par le navigeur du client, donc pas d'impact de performances côté serveur (charge, ...)
- très convivial car la page se trie "instantanément", sans devoir la recharger
Les - :
- Sauf à utiliser un framework incluant des "datasources" (jquery, YUI, ...), ne trie toujours QUE les résultats affichés

Donc la bonne solution dépend de tes besoins (notion de pages ? tris complexes ?, ... ) ,et parfois, une combinaison de 2 des 3 "techniques" peut être utile !
(par exemple, tri serveur en SQL ET local en JS pour les utilisateurs avancés qui désirent pouvoir retrier les choses à leur gré)

Bon courage
2
Bonjour

Une fois le contenu de la page affichée, je voudrais que le visiteur puisse classer les données par date ou bien par lieu.
En fait, ce qui va se passer, c'est que la page sera ré-affichée chaque fois que le visiteur voudra un nouveau critère de tri. On ne peut pas vraiment dire "une fois la page affichée".
Pas de problème pour faire ça en PHP ; à chaque nouvelle demande avec son propre critère, à toi d'interroger ta base avec le 'ORDER BY' adapté. C'est plus efficace (et moins fatiguant!) que de le faire le tri a posteriori en php.
1
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 504
16 déc. 2009 à 15:34
Fait simplement un lien avec "?order=id" (ou autre chose que "id") puis dans ta requête, il suffit d'ajouter "ORDER BY $_GET['id']".
Par contre, il ne faut jamais faire confiance aux entrées de l'utilisateur (GET, POST et les coockies) donc penses à sécuriser ton code. Et comme la variable ne sera pas forcément définie, il faut penser à lui mettre une valeur au cas où ...
1
Rom190686 Messages postés 436 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 20 novembre 2015 35
16 déc. 2009 à 15:34
Merci pour vos explications.
Je pense que je n'ai pas été assez précis.
En fait, au chargement de la page, le contenu de la table s'affiche.
Ensuite, via une liste déroulante (si possible) je veux donner au visiteur la possibilité de choisir :
- une ville.
Cette action listera alors tous les événements existant dans cette ville.
- Une date.
Cette action va alors afficher tous les événements existants à cette date.

Les villes et dates présentes dans les listes déroulantes seront récupérées dans la table sql.

Voila ca que je veux faire. Maintenant, je vous demande comment le faire :))

Merci d'avance
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Rom190686 Messages postés 436 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 20 novembre 2015 35
16 déc. 2009 à 15:47
On ne peut pas le faire en php?
1
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
16 déc. 2009 à 15:56
Si tu peux le faire.
Quelques chose comme ça:

if(isset($_GET['ordre']) && $_GET['ordre']=='ville')
{
$sql='SELECT * FROM table ORDER BY ville ASC';
}
elseif(isset($_GET['ordre']) && $_GET['ordre']=='date')
{
$sql='SELECT * FROM table ORDER BY date ASC';
}
else{$sql='SELECT * FROM table ORDER BY date ASC';}

echo'<table>
<tr><th>Champ</th><th><a href="index.php?page=liste&ordre=date">Date</a></th><th><a href="index.php?page=liste&ordre=ville">Ville</a></th></tr>';


$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while($data = mysql_fetch_array($req))
{
echo'<tr><td></td><td>'.$data['date'].'</td><td>'.$data['ville'].'</td></tr>';
}
echo'</table>';
1
Rom190686 Messages postés 436 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 20 novembre 2015 35
16 déc. 2009 à 21:13
Merci, ce code fonctionne mais ce n'est pas vraiment ce que je cherche.
J'affiche d'autre informations en plus de la date et du lieu.
Toutes ces informations sont déjà mise en page dans un tableau via une requête sql fetch_array suivi de while.
Ce qui m'affiche l'intégralité de ma table.
Une fois celle ci affichée, je voudrais pourvoir via une liste déroulante sélectionner une ville ou une date pour ensuite n'afficher que les évènement se trouvant dans la ville choisit ou uniquement les évènements se passant à la date choisit.
1
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 504
16 déc. 2009 à 15:35
AJAX ...
-4