уникальное поле из базы данных mysql в php

0

У меня есть пример базы данных, такой как, в которой id всегда уникален, но user_id не уникален.

идентификатор, user_id, сообщение, msg_datetime
111, u1, msg от u1, время, присутствующее здесь
112, u2, msg от u2, время, присутствующее здесь
113, u3, msg от u3, время, присутствующее здесь
114, u2, msg от u2, время, присутствующее здесь
115, u7, msg от u7, время, присутствующее здесь
116, u2, msg от u2, время, присутствующее здесь
117, u1, msg от u1, время, присутствующее здесь
118, u5, msg от u5, время, присутствующее здесь

поэтому я хочу захватить только тех уникальных пользователей, которые отправили сообщения и заказали их в DESC через msg_datetime.

Это запрос, который у меня есть.
select id,DISTINCT user_id,msg_datetime ORDER BY msg_datetime DESC но я получаю сообщение об ошибке как:
 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT. любая помощь здесь? какой правильный синтаксис для того, чего я пытаюсь достичь?

Я хочу показать только одну запись для каждого пользователя, неважно, какой идентификатор я показываю, но только 1 на пользователя.

Теги:
distinct

3 ответа

1
Лучший ответ

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

SELECT id,user_id,msg_datetime FROM table_1 GROUP BY user_id ORDER BY msg_datetime DESC

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

SELECT a.user_id, a.last_time, b.id 
FROM
(SELECT user_id, MAX(msg_datetime) as last_time 
 FROM table1)a
INNER JOIN table1 b ON (b.user_id = a.user_id AND b.msg_datetime = a.last_time)

ORDER BY a.last_time;
  • 0
    Эй, похоже, твой первый код решил это. Отлично. Спасибо :)
0

Синтаксис SELECT:

SELECT (fieldlists)
FROM (table)
[WHERE (conditions)]
ORDER BY (something)

Вы любезно забыли сказать, с какой таблицы вы хотите получать данные.

  • 0
    У меня есть имя таблицы в моем коде, просто я не показывал его здесь.
0

Вы неправильно понимаете, как работает DISTINCT. Он работает в строках не в полях. То, что вы хотите, - это групповой максимум, также известный как наибольший-n-для-группы.

Вот один из способов сделать это в MySQL:

SELECT id, user_id, message, msg_datetime
FROM (
    SELECT
        id, user_id, message, msg_datetime,
        @rn := CASE WHEN @prev_user_id = user_id
                    THEN @rn + 1
                    ELSE 1
               END AS rn,
        @prev_user_id := user_id
    FROM (SELECT @prev_user_id := NULL) vars, Table1 T1
    ORDER BY user_id, msg_datetime DESC
) T2
WHERE rn = 1
ORDER BY msg_datetime

Ещё вопросы

Сообщество Overcoder
Наверх
Меню