vendredi , 24 février 2017

Récupérer les dernières lignes dans MySQL avec PHP

Cet article présente un script PHP permettant de récupérer les dernières lignes d’une table dans une base de données MySQL. Il y a de nombreuses possibilités pour faire cette opération, il en existe des plus rapide (une requête SQL, ici il y en a deux) mais celles-ci sont plus complexe pour les néophytes, alors j’ai fait pour le plus grand nombre, cette solution n’est qu’une parmi d’autres. Le script vous permet de choisir le nombre de lignes que vous souhaitez récupérer à partir de la fin.

Comment fonctionne-t-il ? D’abord les explications, le script se trouve juste après pour les plus pressés.

1 – Dans un premier temps, on se connecte sur la base de données contenant la table dans laquelle on souhaite récupérer les données.

2 – Ensuite on récupère avec la première requête (contenant l’instruction COUNT) le nombre de lignes contenues dans la colonne de la table où l’on souhaite obtenir les données et on envoi le résultat dans la variable $nb.

3 – Une fois le nombre de lignes connu, on créer une nouvelle variable nommée $ligne qui contient le nombre de lignes récupéré précédemment moins le nombre de lignes que l’on souhaite récupérer, ici les 7 dernières.

4 – On exécute une deuxième requête qui sélectionne les données grâce à la commande LIMIT. Celle-ci permettra de sélectionner les dernières lignes. La variable $ligne contenant le nombre de lignes moins le nombre souhaité, celui-ci indiquera donc à la requête la ligne à laquelle commencer, puis la variable $nb contenant le nombre total de lignes indiquera la dernière ligne de la table.

5 – Ensuite, cette partie du script est facultative, elle permet juste d’afficher les éventuelles erreurs.

6 – Cette dernière partie est également facultative, elle permet d’afficher les données, mais ce n’est pas forcément l’objectif de tout le monde, donc à chacun de faire en fonction de ses besoins. Enfin, on ferme la connexion avec la base de données.

Information :

La table utilisée dans l’exemple est une table avec des relevés de consommation d’électricité.

– La colonne utilisée pour calculer le nombre de lignes dans l’exemple est date_releve, remplacez celle-ci par la colonne vous intéressant.

– La table s’appelle releve_conso_elec, à remplacer par celle vous intéressant.

– Les données que je souhaite afficher sont dans la colonne conso_globale, à remplacer par celles vous intéressant.

<?php
// 1 - Connexion à MySQL
$link = mysql_connect( 'nom_ou_ip_serveur', 'nom_utilisateur_bdd', 'mot_de_passe_bdd' );
if ( !$link ) {
  die( 'Could not connect: ' . mysql_error() );
}

// Sélection de la base de données
$db = mysql_select_db( 'votre_base_de_donnees', $link );
if ( !$db ) {
  die ( 'Error selecting database 'votre_base_de_donnees' : ' . mysql_error() );
}

// 2 - Récupération du nombre de lignes contenu dans la table
$rqut_nb ="SELECT COUNT( date_releve ) as recuperation FROM releve_conso_elec;";
$rslt_nb = mysql_query( $rqut_nb) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
$data_nb = mysql_fetch_array($rslt_nb);
$nb = ''.$data_nb['recuperation'].'';

// 3 - Nombre de lignes à récupérer, remplacez sept par le nombre souhaité
$ligne = $nb - 7;

// 4 - Récupération des lignes
$query = "SELECT * FROM `releve_conso_elec` LIMIT $ligne , $nb";
$result = mysql_query( $query );

// 5 - Vérification
if ( !$result ) {
  $message  = 'Invalid query: ' . mysql_error() . "n";
  $message .= 'Whole query: ' . $query;
  die( $message );
}

// 6 - Afficher les résultats
while ( $row = mysql_fetch_assoc( $result ) ) {
echo '  Date: ' . $row['date_releve'] . ' - ' . "n";
echo '  Consommation: ' . $row['conso_globale'] . ' kWh,' . "n";
echo '<br />';
}

// Fermer la connexion à MySQL
mysql_close($link);
?>

Les données que je souhaite récupérer :

Récupérer des lignes MySQL avec PHPLe résultat après l’exécution du script :

Récupération des dernières lignes MySQL

3 commentaires

  1. plz qui peut m’aider a executer ce code la pour recupurer de la base et mettre dans le chanps html :

    Organisme <? php
    $b=$_post['mariculecitoyen'];

  2. Bonjour, merci pour le script mais je pense que tu aurais pu faire de manière plus simple comme présenté ci dessous

    SELECT * FROM `releve_conso_elec` order by date_releve desc limit 0,7

    Les données seront par ordre descendant dans ta selection , mais au moins tu as les 7 à partir de la fin
    tu les mets dans un tableau et tu fais un tri sur le tableau si jamais tu les veux par ordre croissant
    Merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *