SQL для получения уведомлений для чата

0

Я работаю в чате со следующим 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

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

  • 0
    Вы можете добавить поле флага на вашу таблицу для статуса чтения и сделать функцию для получения сообщений по каким-либо данным
  • 0
    Говоря «каждый раз, когда пользователь обновляет страницу», вы имеете в виду, когда пользователь вставляет новое сообщение? это правильно? если это так, вы можете использовать триггер при вставке или обновлении; всякий раз, когда вставляется новое сообщение, триггер будет выполнять действие по вашему выбору, которое в вашем случае будет количеством новых сообщений. Однако вам потребуется столбец для хранения статуса сообщения (прочитано / не прочитано), который будет использоваться в запросе подсчета.
Теги:

1 ответ

0

Можете ли вы написать поле в качестве подзадача, а не присоединиться к нему, вот так...

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 

Ещё вопросы

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