Partage
  • Partager sur Facebook
  • Partager sur Twitter

messegerie interne

comment je peux afficher seulement le dernier msg pour chaque utisateu

Sujet résolu
    29 mars 2017 à 12:24:52

    comment je peux afficher seulement le dernier msg pour chaque utilisateur dans une boite de réception
    <?php
    $id = $_GET["id"] ;
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "loo";
    
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = $conn->prepare("SELECT * FROM messages WHERE id_destinataire='$id'");
        $stmt->execute();
        $row = $stmt->FetchAll(PDO::FETCH_ASSOC);  
    
    echo "<table align=center ,border=1;>";
    echo "<tr><th>expediteur</th><th>titre</th><th>message</th> <th>date</th></tr>";
    
    
    foreach ($row as $key => $value) {
    	
    //$id=$value['id'];	  
    //echo '<tr><td><a href="lirenews.php?id_news='.$id_news.' ">'.$value['titre_new'].'</td>';
    $id = $_GET["id"] ;
    
    $id_dest=$value['id_expediteur'];
        
     $stmt1 = $conn->prepare("SELECT * FROM tbl_users WHERE userID='$id_dest'");
        $stmt1->execute();
    $row1 = $stmt1->FetchAll(PDO::FETCH_ASSOC);  
    echo '<tr><td>'.$row1[0]['userName'].'</td>'; 
    echo '<td>'.$value['titre'].'</td>'; 
    echo '<td>'.$value['message'].'</td>';
    echo '<td>'.$value['date'].'</td></tr>'; 
    
    }
    echo '</table>';

    • Partager sur Facebook
    • Partager sur Twitter
      29 mars 2017 à 12:52:44

      Bonjour ? Merci ? Détails ?

      Sinon ça viens de ta requête SQL qui sélectionne tous les messages sans limite...

      SELECT * FROM messages WHERE id_destinataire='$id' LIMIT 1

      Et fait attention à tes requêtes, elles sont tout sauf protégées contre les injections SQL. $stmt = $conn->prepare(); n'est pas qu'une simple méthode a utiliser n'importe comment, il faut utiliser des paramètres puis exécuter. Lis la doc pour en savoir plus.

      • Partager sur Facebook
      • Partager sur Twitter

      </radiax>

        29 mars 2017 à 13:12:57

        Merci mais LIMIT 1 n'affiche qu'un seul utilisateur (qui envoie le dernier message)
        • Partager sur Facebook
        • Partager sur Twitter
          29 mars 2017 à 13:42:10

          Bonjour, pour récupérer le dernier message de chaque utilisateur :

          SELECT * FROM messages WHERE id_destinataire='$id' ORDER BY date DESC LIMIT 1

          LIMIT 1 ne te renvoie que la première ligne de la requête. 

          • Partager sur Facebook
          • Partager sur Twitter
            29 mars 2017 à 14:17:16

            ZouaghiAhlem a écrit:

            comment je peux afficher seulement le dernier msg pour chaque utilisateur dans une boite de réception
            [...]
            Merci mais LIMIT 1 n'affiche qu'un seul utilisateur (qui envoie le dernier message)

            En fait tu ne donne tellement aucun détail qu'on ne comprends pas ce que tu souhaite faire. C'est à peine si on ose croire que tu souhaite réellement de l'aide o_O

            -
            Edité par Radiax18 29 mars 2017 à 14:18:07

            • Partager sur Facebook
            • Partager sur Twitter

            </radiax>

              29 mars 2017 à 14:59:03

              Je pense qu'il veut récupérer LE dernier message PAR utilisateur. e.g. le dernier message (1 message) pour chaque utilisateur.

              Il faut dans ce cas utiliser un GROUP BY, pour grouper les résultats par utilisateur, cependant pour récupérer le dernier message uniquement il faut utiliser une sous requete SQL pour ordoner les résultats de facon decroisante avant de faire appel au GROUP BY (sinon le GROUP BY récupèrerait le premier message trouvé dans la table pour chaque utilisateur).

              En passant j'ai fusionné tes deux requetes en utilisant une jointure entre messages et users, autant tout faire en une seule requete:

              SELECT m.*, u.*
              FROM (
                  SELECT *
                  FROM `messages`
                  ORDER BY `date` DESC
              ) AS m
              INNER JOIN `tbl_users` AS u
                  ON m.`id_expediteur` = u.`userID`
              GROUP BY m.`id_expediteur`
              WHERE m.`id_destinataire` = ...
              ORDER BY m.`date` DESC

              -
              Edité par Sombrelune 29 mars 2017 à 15:11:03

              • Partager sur Facebook
              • Partager sur Twitter
              - Activer les erreurs : PHP - PDO - MYSQLI - ¯\_ツ_/¯ - Documentations : PHP - MySQL -
                29 mars 2017 à 16:05:48

                problème résolu  merci tout le monde

                je vous remercie infiniment pour votre aide @Sombrelune

                • Partager sur Facebook
                • Partager sur Twitter

                messegerie interne

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown