How to return only the last result of more than one field from the same table?

0

I'm trying to make a PM's system in php script I want to make a list of unread messages but want to show only one entry (the last) of each user sending a message ... in the script that did shows all unread but shows more than one of each user (if there is more than one). Roughly like the repeat loop was brought only the last PM of each user who sent pm and that has not been read.

My php

<?php

$userID = $_SESSION['user_released'];//Declaramos variavel com nome de usuário logado

//Iniciamos a consulta
$Busca = $pdo->query("SELECT * FROM pms WHERE status = 0 AND enviador != '$userID' ORDER BY id DESC");
$Busca->execute();

//Iniciamos o laço de repetição   
while($fetch = $Busca->fetch(PDO::FETCH_ASSOC)){
    //Armazenamos as informações
    $pmID = $fetch['id'];
    $autor =  $fetch['enviador'];
    $data =  $fetch['data'];
    $status = $fetch['status'];

$totali = $Busca->rowCount($autor);

if($totali >= 1){


    //Iniciamos a consulta buscando informação de usuário!
    $Verific = $pdo->prepare("SELECT * FROM users WHERE 'user' = :user");
    $Verific->bindParam(':user', $autor, PDO::PARAM_STR);
    $Verific->execute();
    //Iniciamos o laço de repetição
    while($fatch = $Verific->fetch(PDO::FETCH_ASSOC)){
         //Armazenamos as informações
        $user = $fatch['user'];
        $autorAvatar = $fatch['avatar'];
    }



}// Fecha "if" !!!


    //Iniciamos a consulta de contagem de pms não lidas!!!
    $BuscaPM = $pdo->query("SELECT * FROM pms WHERE enviador = '$autor' AND status = 0");
    $BuscaPM->execute();
    while($fatch = $BuscaPM->fetch(PDO::FETCH_ASSOC)){
        $contagem = $fatch['id'];
    }

    $total = $BuscaPM->rowCount($contagem);

?>
<!-- Trecho HTML para exibir resultados ! -->

<?php
}// Fecha "while" !!!
?> 
    
asked by anonymous 01.04.2015 / 01:22

1 answer

2

Before starting your first while declare the variable $_autor , and inside the loop, create the following check before searching and printing everything, thus:

// Declare a variável como nula
$_autor = NULL;

//Iniciamos o laço de repetição
while($fetch = $Busca->fetch(PDO::FETCH_ASSOC)){
    //Armazenamos as informações
    $pmID = $fetch['id'];
    $autor =  $fetch['enviador'];
    $data =  $fetch['data'];
    $status = $fetch['status'];

    if($autor != $_autor) { // comparamos o atual com o anterior
        $_autor = $autor; // se for diferente, armazena na variável para a próxima comparação

        // continue seu código normalmente juntamente com a impressão e feche o if lá embaixo

    } // Fecha o "if"
}// Fecha "while" !!!

Thus, the first PM of each user will be printed and the rest will be ignored in the first IF because the user remains the same.

I hope it helps.

Hugs

    
01.04.2015 / 05:18