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

Asked

Viewed 430 times

0

I’m trying to make a PM’s system in php script I want to make a list of unread messages but I want to show only one entry (the last one) of each user I send a message...in the script I did shows all unread but shows more than one of each user (if there are more than one). Roughly I would like the repeat loop brought up only the last PM of each user sending pm and that has not yet 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" !!!
?> 

1 answer

2


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

// 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, each user’s first PM will be printed and the rest will be ignored in the first IF because the user remains the same.

I hope it helps.

Hugs

  • Thanks! Closed them all. That’s right.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.