Количество непрочитанных сообщений между двумя пользователями запрос MYSQL
есть 2 таблицы вида
1я id username userdata log pass
2я id idfrom idfor text isread date .....
нужно одним запросом получить имена и количество непрочитанных сообщений для каждого пользователя написавшего определенному пользователю
и при этом иметь список имен всех контактов с кем переписывался некий пользователь
можно так попробовать
SELECT *, IF(`idfrom` != :id_my, `idfrom`, `idfor`) AS user_not_me, SUM(`isread`) AS count_new FROM message WHERE (`idfrom` = :id_my OR `idfor` = :id_my) GROUP BY user_notme
получимм количество непрочитанных сообщений как для первого, так и для второго участников диалога в сумме. Что бы получить слагаемое, предназначенное для вывода количества только для одного из собеседников :
SELECT *, IF(`idfrom` != :id_my, `idfrom`, `idfor`) AS user_notme, SUM(`isread` * IF(`idfor` = :id_my, 1, 0)) AS count_new FROM message WHERE (`idfrom` = :id_my OR `idfor` = :id_my) GROUP BY user_notme
а как получить имена пользователей и одновременно количество непрочитанных сообщений? JOIN ?
SELECT m.*
, u.username
, if(fromuserid != :id_my, fromuserid, foruserid) AS user_notme
, sum(if(m.isread, 0, 1) * if(foruserid = :id_my, 1, 0)) AS count_new
FROM
message m
JOIN user u
ON (u.id = if(fromuserid != :id_my, fromuserid, foruserid))
WHERE
(fromuserid = :id_my
OR foruserid = :id_my)
GROUP BY
user_notme
решил
Комментарии
Оставить комментарий
Базы данных - MySql (Maria DB)
Термины: Базы данных - MySql (Maria DB)