Как показать отдельный идентификатор отправителя из разговора

Обновленный вопрос:

мой личные сообщения Структура базы данных выглядит следующим образом:

+----+-------+-------+-------+--------+------------+
| id | text  | byuid | touid | unread |  timesent  |
+----+-------+-------+-------+--------+------------+
|  1 | Hi    |     1 |     4 |      1 | 1514764805 |
|  2 | hello |     1 |     4 |      1 | 1514764804 |
|  3 | hlw   |     1 |     4 |      1 | 1514764803 |
|  4 | good  |     2 |     4 |      1 | 1514764802 |
|  5 | fine  |     3 |     4 |      0 | 1514764801 |
+----+-------+-------+-------+--------+------------+

Моя таблица all_users_table:

+----+-------+------+
| id | name  | pass |
+----+-------+------+
|  1 | user1 |  123 |
|  2 | user2 |  112 |
|  3 | user3 |  124 |
|  4 | user4 |  258 |
|  5 | user5 |  315 |
+----+-------+------+

Мой текущий код SQL

$sql = "SELECT
a.name, b.id, b.byuid, b.unread, b.starred FROM all_users_table a
INNER JOIN private_messages b ON a.id = b.byuid
WHERE b.touid='4' AND starred='0'
ORDER BY b.timesent DESC, b.unread
LIMIT $limit_start, $items_per_page
";

Какая печать, как показано ниже:

1
1
1
2
3

Все, что я хочу, это (для туид = 4)

  1. выведите все уникальные данные в качестве вывода.
  2. Сортировать по непрочитанному DESC
  3. Заказать Timesent DESC
  4. Предел 0, 2 (для нумерации страниц)

Выход должен быть:

1
2

Кто-нибудь может мне помочь ? Я пробовал Group By, но он показывает пустые результаты.

-2

Решение

$sql = "SELECT
a.name, b.id, b.byuid, b.unread, b.starred FROM all_users_table a
INNER JOIN private_messages b ON a.id = b.byuid
WHERE b.touid='".$myid."' AND starred='0' GROUP BY a.name
ORDER BY b.timesent DESC, b.unread
LIMIT $limit_start, $items_per_page";

Попробуйте это с ГРУППА ПО КЛАУЗУ

0

Другие решения

"SELECT
a.name, b.id, b.byuid, b.unread, b.starred
FROM all_users_table a
LEFT JOIN private_messages b ON a.id = b.byuid
WHERE b.touid = '".$myid."' AND starred = '0'
ORDER BY b.timesent DESC, b.unread
LIMIT $limit_start, $items_per_page"
0

Если вам не нужны дублированные строки, вы должны использовать предложение DISTINCT

$sql = "SELECT DISTINCT
a.name, b.id, b.byuid, b.unread, b.starred
FROM all_users_table a
INNER JOIN private_messages b ON a.id = b.byuid
WHERE b.touid='".$myid."' AND starred='0'
ORDER BY b.timesent DESC, b.unread
LIMIT $limit_start, $items_per_page";

(использование group by для избежания дублирования строки при отсутствии функции агрегирования, как SUM () или MAX (), устарело в sql и в самой последней версии mySQL генерирует ошибку)

Но, глядя на ваши обновленные данные, вы ищете не отдельный результат, а результат последних отправленных значений.
и для этого вам не нужно отдельное, а объединение всех нужных вам столбцов и подвыбора, которые получают последнее значение для byuid

    select  a.name, b.id, b.byuid, b.unread, b.starred
FROM all_users_table a
INNER JOIN private_messages b ON a.id = b.byuid A
INNER JOIN (
select byuid, max(timesent) max_sent
from private_messages
WHERE b.touid= 4
group by byuid
) t on t.byuid = b.byuid and t.max_sent = b.timesent
ORDER BY  b.timesent DESC, b.unread
LIMIT $limit_start, $items_per_page
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector