PHP MySQL Order By

Dans les deux derniers chapitres de ce tutorial je vous ai montré comment sortir les données de la base de données et les afficher à l'écran.
Dans ce chapitre, j'entrerai dans l'aspect final de l’affichage des données, et la capture des erreurs qui peuvent se produire lorsque vous exportez des données.

PHP cours tutorial

Base de données MySQL Order By

Ordre par une colonne

Le mot-clé Order By est employé pour assortir les données dans un recordset.
Le mot-clé Order By tri les enregistrements dans l'ordre croissant par défaut.
Si vous voulez assortir les enregistrements dans un ordre décroissant, vous pouvez employer le mot-clé de DESC.
Syntaxe


SELECT colonne_name(s) FROM table_name ORDER BY colonne_name(s) ASC|DESC



Pour apprendre plus au sujet du SQL, visitent svp notre cours d'instruction de SQL.
Exemple
L'exemple suivant choisit toutes les données stockées dans la table « visiteurs » que nous avons créé lors d’un chapitre précédent, on va faire un ordre du résultat par la colonne « âge » :



Sélectionner le code


	<?PHP
	$con = mysql_connect (" server "," user", " passe") ;
	if (!$con)
	  {
	  die('connexion impossible' . mysql_error());
	  }
	mysql_select_db ("maBase", $con) ;

	$result = mysql_query("SELECT * FROM visiteurs ORDER BY age DESC");

	while($row = mysql_fetch_array($result))
	  {
	  echo $row['nom']. " " . $row['prenom']. " ". $row['Age']. "<br />";
	 }
	mysql_close($con);

	?>

 

Récupération d'erreur

En émettant toutes les informations de la base de données, il est peu probable qu'il n'y n'aura aucune donnée, mais si vous autorisez la mise à jour et la suppression d'enregistrements, il est certainement possible qu’il y a des erreurs. Heureusement, avec PHP et MySQL, il y a un moyen facile pour faire face à cela .
En utilisant :

$num=mysql_numrows($result) ;

où $result contient le résultat d'une requête sur la base de données (comme sélectionner tous les enregistrements par exemple). Comme nous l’avons vu dans un chapitre précédent, cela fixera la valeur de $num comme le nombre de lignes dans le résultat (et nous l’avons utilisée dans une boucle). Pour cette raison, vous pouvez faire un piège simple erreur à l'aide d'une instruction IF :

if ($num==0) {
echo "La base de données ne contient aucune données";
} else {
Le code à exécuter
}

Vous pouvez améliorer ce code en le rendant plus convivial (par exemple en fournissant un lien vers la page Ajouter des données si aucun contact n'existe).

Classer par ordre des données

Non seulement vous pouvez copiez des données basées sur le contenu d'un champ, mais vous pouvez également commander la sortie basée sur un champ (par exemple mise en ordre alphabétique). Par défaut, la sortie de vos requêtes sera dans l'ordre du champ id, allant de 1 vers le haut. Vous pouvez faire un trie sur n'importe quel champs.

Par exemple, un sort utile serait de placer tous les utilisateurs dans l'ordre alphabétique, basé sur leur nom de famille. Pour rappelle, il s'agirait de l'ordre croissant, qui va de A à Z. (par ordre croissant est également de 1 à 10 etc. et décroissant fournit de Z à A et 10 à 1). Pour ce faire, vous utiliseriez la requête suivante :

SELECT * FROM contacts ORDER BY nom ASC

Vous pouvez également utiliser des DESC pour classer les données dans l'ordre décroissant.

Plus d’utilisation de mysql_numrows et ORDER by

La variable $num est très importante car, en dehors de la récupération d'erreur et des boucles, il a beaucoup d'autres utilisations. Un exemple de ceci serait d'imprimer uniquement les 5 derniers enregistrements ajoutés à une base de données.

Tout d'abord, vous aurez besoin d’un ordre basé sur le champ id. Il faudrait qu'ils soient dans l'ordre décroissant. Comme suit

SELECT * FROM contacts ORDER BY id DESC

Maintenant vous avez vos données dans l'ordre du plus récent au plus ancien, mais cela n'oblige pas le script à montrer seulement les 5 premiers de cet ordre. Pour ce faire, vous devrez indiquer à votre boucle de ne parcourir que 5 au lieu de $num .

Bien sûr, avant de le faire, il serait important de vérifier que $num était supérieure à 5, car si vous avez exécuté la boucle 5 fois et que vous n’avez que 3 lignes, vous obtiendrez une erreur. C'est facile à voir bien sûr, et le code suivant est un exemple :

if ($num>5) {
$to=5;
}else{
$to=$num;
}
$i=0;
while ($i < $to) {
RESTE DU CODE

Ce code devrait vérifier s'il y avait plus de 5 lignes dans la base de données. Si oui, la boucle serait configurée pour être exécutée 5 fois. S'il y avait moins de 5 rangs la boucle serait exécutée juste le nombre exact de fois que le nombre d’enregistrements de la base de données entière.

Sélection d'un enregistrement unique

Maintenant, en utilisant le champ ID qui est unique, nous pouvons sélectionner n'importe quel enregistrement de notre base de données à l'aide :

SELECT * FROM contacts WHERE id = '$id'

Où $id est une variable contenant un numéro d'un enregistrement. Cela peut sembler être un peu sans valeur, mais vous pouvez l'utiliser très efficacement dans un certain nombre de cas différents. Par exemple, si vous voulez avoir un site généré dynamiquement par une base de données et un seul script PHP, vous pouvez écrire le script pour inclure les données de la base de données dans la conception. Puis, en utilisant le champ id, vous pouvez sélectionner chaque page et mettez-la dans la sortie. Vous pouvez même utiliser des URL de la page pour spécifier le sujet que vous voulez par exemple

http://www.votresite.com/news/sujets.php?sujet=739

Et puis le script PHP Recherchera l'enregistrement avec l'id correspondant à $sujet, qui serait dans ce cas 739

Ordre par deux colonnes



Il est également possible de passer la commande par plus d'une colonne. En passant la commande par plus d'une colonne, la deuxième colonne est seulement employée si les valeurs dans la première colonne sont vérifiées :


SELECT nom_colonne(s) FROM nom_table ORDER BY colonne1 ASC|DESC, colonne2 ASC|DESC



Par carabde 20 Aout 2014