Работа с SELECT и SUB SELECT в MySQL - PullRequest
0 голосов
/ 22 мая 2018

У меня есть вопрос по поводу SQL, я никогда не работал с сабвуфером select, и в итоге потерял его.

Meu SQL:

    SELECT CLI.id, CLI.nome, CLI.senha, CLI.email, CLI.cpf, CLI.celular, CLI.data_nasc, CLI.genero, CLI.data_cadastro, CLI.status, CLI.id_socket, ATEN.mensagem, ARQ.nome AS foto, ATEN.data_mensagem
FROM ut_clientes AS CLI
LEFT JOIN ut_arquivos AS ARQ ON (ARQ.id_tipo = CLI.id AND ARQ.tipo = "ut_clientes")
INNER JOIN ut_atendimentos AS ATEN ON (ATEN.id_usuario_envio = CLI.id)
WHERE ATEN.id_usuario_envio != 59163 
GROUP BY CLI.id 
ORDER BY ATEN.data_mensagem
DESC

Что я хотел бы сделать, так это сгруппировать сообщения в соответствии с идентификатором клиента и вывести только последнее сообщение, записанное в базе данных, в соответствии с data_mensagem.

Я пробовал разными способами, но всегда последнийто, что отображается, является первым сообщением, вставленным в БД.

Если кто-нибудь может мне помочь, я буду благодарен.Спасибо, ребята!

1 Ответ

0 голосов
/ 22 мая 2018

Это может помочь вам ... Я использую соединение с предварительным запросом (псевдоним PQ).Этот запрос только идет к вашим сообщениям и захватывает идентификатор клиента и самый последний на основе MAX ().Выполнив эту группировку, вы получите максимум 1 запись для каждого клиента.У меня также есть предложение WHERE для исключения одного идентификатора, который вы перечислили.

Из результата THAT вы просто присоединяетесь к остальной части вашего запроса.

SELECT 
      CLI.id, 
      CLI.nome, 
      CLI.senha, 
      CLI.email, 
      CLI.cpf, 
      CLI.celular, 
      CLI.data_nasc, 
      CLI.genero, 
      CLI.data_cadastro, 
      CLI.status, 
      CLI.id_socket, 
      ATEN.mensagem, 
      ARQ.nome AS foto, 
      PQ.data_mensagem
   FROM 
      ut_clientes AS CLI
         LEFT JOIN ut_arquivos AS ARQ 
            ON CLI.id = ARQ.id_tipo 
            AND ARQ.tipo = "ut_clientes"
         INNER JOIN
         ( select 
                 ATEN.id_usuario_envio,
                 MAX( ATEN.data_mensagem ) as MostRecentMsg
              from 
                 ut_atendimentos AS ATEN
              where
                 ATEN.id_usuario_envio != 59163 
              group by
                  ATEN.id_usuario_envio ) PQ
           ON CLI.id = PQ.id_usuario_envio
   GROUP BY 
      CLI.id 
   ORDER BY 
      PQ.data_mensagem DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...