|
Lorsque l'on utilise une base de données, il arrive souvent que l'on fasse des requêtes sur cette base de données et que l'on obtienne des dizaines voir des centaines de résultats.
Jusqu'ici, vous faisiez une boucle while pour parcourir l'ensemble de vos résultats que vous affichiez sur une même page.
Ce tutorial va donc vous apprendre à créer une barre de navigation.
Vous savez déjà que le SQL permet d'ordonner les résultats grâce à l'ORDER BY.
Ce que vous ne savez peut être pas, c'est que le SQL permet, lors d'une sélection sur une table, de limiter le nombre de résultats obtenus grâce à la commande LIMIT.
Pour concrétiser tout cela et donc de voir comment fonctionne cette commande LIMIT, nous allons créer une table catalogue permettant de lister tous les DVD d'une collection par exemple.
On pourrait avoir alors la structure suivante :
Requête SQL pour la table catalogue :
CREATE TABLE catalogue (
id int(11) NOT NULL auto_increment,
titre text NOT NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;
Remplissons alors cette table avec différents dvd :
Requête SQL pour le contenu de catalogue :
INSERT INTO catalogue VALUES (1, ' Inglourious basterds');
INSERT INTO catalogue VALUES (2, 'Terminator 4 Renaissance');
INSERT INTO catalogue VALUES (3, 'Transformers 2');
INSERT INTO catalogue VALUES (4, 'Le Réveil du Cobra');
INSERT INTO catalogue VALUES (5, 'Public enemies');
INSERT INTO catalogue VALUES (6, 'L'Âge de glace 3');
INSERT INTO catalogue VALUES (7, 'Le Temps des dinosaures');
INSERT INTO catalogue VALUES (8, 'Harry Potter 6');
INSERT INTO catalogue VALUES (9, 'les disparus');
INSERT INTO catalogue VALUES (10, 'Prison break');
Pour faire une requête simple permettant d'afficher tous les DVD de ce catalogue sur
une même page WEB, et ce, en classant les DVD par ordre alphabétique, ce qui donnerait le
code suivant de la page index.php:
<html>
<head>
<title>Les DVD du catalogue</title>
</head>
<body>
Les différents DVDs DVD du catalogue:<br /><br />
<?php
// on se connecte à notre base
$base = mysql_connect ('serveur', 'login', 'password');
mysql_select_db ('nom_base', $base);
// Préparation de la requête
$sql = 'SELECT titre FROM catalogue ORDER BY titre ASC';
// on lance la requête (mysql_query) et on impose un message d'erreur si la //requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on compte le nombre de DVD contenu dans la base de données
$nb_DVDs = mysql_num_rows($req);
if ($nb_DVDs == 0) {
echo 'Aucun DVD enregisté.';
}
else {
echo '<table><tr><td>Titre</td></tr>';
// on va scanner toutes les entrées un par un
while ($data = mysql_fetch_array($req)) {
// on affiches les résultats dans la <table>
echo '<tr><td>' , htmlentities(trim($data['titre'])) , '</td></tr>';
}
echo '</table>';
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($req);
// on ferme la connexion à la base de données.
mysql_close ();
?>
</body>
</html>
Introduction de la commande LIMIT.
LIMIT va vous permettre de limiter le nombre de résultats à afficher d'une requête SQL donnée.
En effet, vous allez pourvoir, par exemple, n'afficher que les 3 premiers DVD de la table.
Reprenons donc le code précédent, et changeons la requête SQL par la requête suivante :
SELECT titre FROM catalogue ORDER BY titre ASC LIMIT 0,3
Explication :
- - on fait cette sélection sur la table catalogue (FROM catalogue)
- - on ordonne les résultats dans l'ordre alphabétique des titres (BY titre ASC)
- - on sélectionne juste 3 DVD à partir du 0 DVD, soit du premier DVD (LIMIT 0,3)
En résumé pour le LIMIT x,y :
On sélectionne y éléments et ce, à partir du (x+1) ème élément.
Bien sur, tout dépend de l'ordre dans lequel on fait notre requête : ORDER BY ... ASC ou ORDER BY ... DESC (ordre croisant ou décroissant).
En effet, si on a un ORDER BY ... DESC (ordre décroissant), on prendra en fait les y éléments qui arrivent juste avant le (x+1) ème élément.
En effet, notre affichage page par page va en fait refaire plusieurs fois la même requête SQL avec un LIMIT x,y sauf qu'à chaque fois, et donc à chaque page, le paramètre x va changer.
...Précèdent... Vous êtes ici:Comment faire un affichage page par page Suivant…
|