Page 1 sur 1

trie bdd sur plusieurs champs

Posté : 24 juin 2011, 13:21
par Gilles COSTE
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)

Re: trie bdd sur plusieurs champs

Posté : 27 juin 2011, 10:38
par sadeq
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.

Re: trie bdd sur plusieurs champs

Posté : 07 juil. 2011, 06:27
par Gilles COSTE
les 3 champs à la fois

Merci beaucoup pour ton aide

Re: trie bdd sur plusieurs champs

Posté : 07 juil. 2011, 19:30
par sadeq
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à.

Re: trie bdd sur plusieurs champs

Posté : 07 juil. 2011, 20:05
par Gilles COSTE
Merci beaucoup