trie bdd sur plusieurs champs

Gilles COSTE
Invité n'ayant pas de compte PHPfrance

24 juin 2011, 13:21

Bonjour,

Ce code me permet de pouvoir classer par ordre asc ou desc le résultat du champ "min" de ma bdd

Je souhaiterai pouvoir ajouter la possibilité de classer par ordre asc ou desc le champ "style" de ma bdd et aussi le champ "visites".

Comment puis je faire pou rajouter ces conditions dans ce code

Merci beaucoup pour votre aide
<?php
if (isset($_GET['mintri'])) {
if ( strtolower($_GET['mintri']) == 'desc') {
$mintri = 'desc';
}
else {
$mintri = 'asc';
}
}
else {
$mintri = 'asc';
}

echo '<p>Time <a href="?mintri=asc">-</a> I <a href="?mintri=desc"> +</a></p>';
?>
<?php
// information pour la connection à le DB
$host = 'localhost';
$user = 'usr';
$pass = 'pass';
$db = 'bdd';

// connection à la DB
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

// requête SQL qui compte le nombre total d'enregistrements dans la table et qui
//récupère tous les enregistrements
$select = "SELECT *,SUBSTRING(commentaire,1,26) AS commentaire  from music where archives='non' order by min $mintri";
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

27 juin 2011, 10:38

Est-ce que tu veux trier les 3 champs en même temps ou bien par chaque champ à la fois. Car ce n'est pas la même chose.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Gilles COSTE
Invité n'ayant pas de compte PHPfrance

07 juil. 2011, 06:27

les 3 champs à la fois

Merci beaucoup pour ton aide

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

07 juil. 2011, 19:30

Bonjour,

Dans ce cas, tu auras 3 liens hypertextes qui permettent à l’utilisateur de choisir les champs et leurs ordres de tri. Puis dans la requête SQL tu auras 3 champs dans la clause ORDER BY.

Voici une proposition d'implémentation de cette solution:
<?php
// variables de travail
$mintri =  isset($_GET['mintri']) &&  strtolower($_GET['mintri']) == 'desc' ?  'desc' : 'asc'; //par défaut l'ordre est ASC
$styletri=  isset($_GET['styletri']) &&  strtolower($_GET['styletri']) == 'desc' ?  'desc' : 'asc'; 
$visitestri =  isset($_GET['visitestri']) &&  strtolower($_GET['visitestri']) == 'desc' ?  'desc' : 'asc';

// liens pour les champs de tri
echo '<p>Time <a href="?mintri=asc">-</a> I <a href="?mintri=desc">+</a></p>';
echo '<p>Style<a href="?styletri=asc">-</a> I <a href="?styletri=desc">+</a></p>';
echo '<p>Visites<a href="?visitestri=asc">-</a> I <a href="?visitestri=desc">+</a></p>';

?>
<?php
// information pour la connection à le DB
$host = 'localhost';
$user = 'usr';
$pass = 'pass';
$db = 'bdd';

// connection à la DB
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

// requête SQL qui compte le nombre total d'enregistrements dans la table et qui
//récupère tous les enregistrements
$select = "SELECT *,SUBSTRING(commentaire,1,26) AS commentaire  from music where archives='non' order by min $mintri, style $styletri, visites $visitestri"; // il faut bien ordonner les champs de tri dans ORDER BY selon les niveaux de tri souhaités
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result)
Voilà.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Gilles COSTE
Invité n'ayant pas de compte PHPfrance

07 juil. 2011, 20:05

Merci beaucoup