@me000001k

Как оформить вывод значений в PHP из разных строк БД без повторений?

Я пишу примитивный мессенджер на PHP, в нем есть вкладка сообщения, где я хочу выводить всех пользователей, с кем была начата переписка. Переписки я беру из таблицы MySQL такого типа:
Примерный вид таблицы

+----+-----------------+--------------------+---------------------------------------+---------------------+
| id | sender_username | recipient_username | message | time |
+----+-----------------+--------------------+---------------------------------------+---------------------+
| 1 | Admin | Test | Текст сообщения | 2022-12-03 02:12:31 |
| 2 | Admin | user2 | Текст сообщения | 2022-12-03 02:12:31 |
| 3 | Admin | user1 | Текст сообщения | 2022-12-03 02:12:31 |
| 4 | Test | Admin | Текст сообщения | 2022-12-03 02:12:31 |
| 5 | user2 | Admin | Текст сообщения | 2022-12-03 02:12:31 |
| 6 | Test | Admin | Текст сообщения | 2022-12-03 21:55:32 |
| 7 | Admin | Test | Текст сообщения | 2022-12-03 21:56:54 |
+----+-----------------+--------------------+---------------------------------------+---------------------+

В PHP я пробовал выводить это так:
Вывод

<?php
            
            foreach ($get_messages as $message) {
                
                if ($message['sender_username'] === $_COOKIE['username']) {
                    
                    echo '<li>'.$message['recipient_username'].'</li>';
                    
                } elseif ($message['recipient_username'] === $_COOKIE['username']) {
                    
                    echo '<li>'.$message['sender_username'].'</li>';
                    
                }
                
            }
            
            ?>


$get_messages содержит следующую функцию:
Функция

function get_messages() {
    
    global $link;
    
    $sql = "SELECT * FROM messages";
    
    $object = mysqli_query($link, $sql);
    
    $result = mysqli_fetch_all($object, MYSQLI_ASSOC);
    
    return $result;
    
}

$get_messages = get_messages();


Но таким образом получается, что мне выводятся имена пользователей каждого сообщения, появляются дубли. Через DISTINCT не получается, поскольку даже если значение столбца одинаковое, то строка универсальна.
Подскажите пожалуйста, может как-то по другому оформить структуру таблиц или выводить имена по другому принципу?

upd:
Чтобы было проще понять, закинул сделанную часть на хостинг:
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
@me000001k Автор вопроса
$username = $_COOKIE['username'];
$sql = "SELECT sender_username users FROM messages WHERE recipient_username = '$username' UNION SELECT recipient_username FROM messages WHERE sender_username = '$username'";
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@MikMik
$sql = "SELECT DISTINCT(`recipient_username`) FROM `messages` WHERE sender_username = ".$_COOKIE['username'];
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы