Я пишу примитивный мессенджер на 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:
Чтобы было проще понять, закинул сделанную часть на хостинг: