SQL для получения уведомлений для чата - PullRequest
0 голосов
/ 28 мая 2018

Я работаю в чате со следующим SELECT:

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, 
  MAX(ATEN.mensagem) AS mensagem, COUNT(ATEN.mensagem) AS novas_mensagens, 
  SUM(COMP.valor) AS valor_total, COMP.data AS ultima_compra, 
  ARQ.nome AS foto, ATEN.data_mensagem, ATEN.mensagem_visualizada

FROM ut_clientes AS CLI

LEFT JOIN ut_compras AS COMP ON COMP.id_cliente = CLI.id
LEFT JOIN ut_arquivos AS ARQ ON ARQ.id_tipo = CLI.id AND ARQ.tipo = 'ut_clientes'
LEFT JOIN ut_atendimentos AS ATEN ON ATEN.id_usuario_envio = CLI.id

WHERE ATEN.id_usuario_recebido = 59163
AND NOT EXISTS(
    SELECT ATEN.id_usuario_recebido
        FROM ut_atendimentos AS ATEN2

    WHERE ATEN2.id_usuario_envio = ATEN.id_usuario_envio 
    AND ATEN2.data_mensagem > ATEN.data_mensagem
)
GROUP BY ATEN.id_usuario_envio
ORDER BY ATEN.data_mensagem DESC

Данные, которые я получаю, заполняют мое представление: http://prntscr.com/jmkkpq

Я внедряю уведомления и COUNTвыполнение, которое я выполняю, происходит неправильно, и я хотел бы знать, как правильно реализовать COUNT, чтобы каждый раз, когда пользователь обновлял страницу, SQL получал COUNT новых сообщений в базе данных, которые не были прочитаны.

Мой стол: http://prntscr.com/jmkde8

Спасибо, ребята!

1 Ответ

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

Можете ли вы написать поле как подвыбор вместо левого соединения, как это ...

SELECT 
    CLI.id, 
    CLI.nome, 
    CLI.senha,
    ...
    (SELECT COUNT(mensagem) FROM ut_atendimentos WHERE id_usuario_envio = CLI.id) AS novas_mensagens,
    ...
FROM ut_clientes AS CLI 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...