Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 对于未读邮件计数,是否也应将其删除?“最近发送消息的时间”是什么?我的错,我不清楚:“count_thread_msgs”是线程中的消息总数,与发送消息的人无关count_unread_msg'是发送到特定用户id(to_usr_id)的未读邮件数。@Jo_Mysql - Fatal编程技术网

Mysql 对于未读邮件计数,是否也应将其删除?“最近发送消息的时间”是什么?我的错,我不清楚:“count_thread_msgs”是线程中的消息总数,与发送消息的人无关count_unread_msg'是发送到特定用户id(to_usr_id)的未读邮件数。@Jo

Mysql 对于未读邮件计数,是否也应将其删除?“最近发送消息的时间”是什么?我的错,我不清楚:“count_thread_msgs”是线程中的消息总数,与发送消息的人无关count_unread_msg'是发送到特定用户id(to_usr_id)的未读邮件数。@Jo,mysql,Mysql,对于未读邮件计数,是否也应将其删除?“最近发送消息的时间”是什么?我的错,我不清楚:“count_thread_msgs”是线程中的消息总数,与发送消息的人无关count_unread_msg'是发送到特定用户id(to_usr_id)的未读邮件数。@Jonathan:即使用户不知道一条或多条邮件(即发件人和收件人),您确定要在线程中包含全部邮件吗?这会不会导致每个线程都显示给每个用户()?哪一条应该是所需结果集中的“最新消息”:线程中的最新消息,即使用户既不是发件人也不是收件人;他们收到的最新


对于未读邮件计数,是否也应将其删除?“最近发送消息的时间”是什么?我的错,我不清楚:“count_thread_msgs”是线程中的消息总数,与发送消息的人无关count_unread_msg'是发送到特定用户id(to_usr_id)的未读邮件数。@Jonathan:即使用户不知道一条或多条邮件(即发件人和收件人),您确定要在线程中包含全部邮件吗?这会不会导致每个线程都显示给每个用户()?哪一条应该是所需结果集中的“最新消息”:线程中的最新消息,即使用户既不是发件人也不是收件人;他们收到的最新消息;或者是他们通讯的最新消息?谢谢你的回答,查询在某些情况下是有效的,但我有几个问题:1)我得到的是每个线程的第一条消息,而不是最后一条。2) 我认为它可以获取所有系统消息,您可以添加另一个查询来获取特定用户的线程吗?(以便向用户显示其消息)。3) 我的数据库中有3个线程,但我得到了5行结果。这可能吗?我附上了两张截图,一张是用户信息表,另一张是结果:-
+--------------+         +---------------------+
|   messages   |         |        users        |
+----+---------+         +---------------------+
| id | message |         | id | username | ... 
+----+---------+         +---------------------+

+------------------------------------------------------------------------------+
|                                 users_messages                               |
+------------------------------------------------------------------------------+
| id | from_usr_id | to_usr_id | msg_id | thread_id | read | sent_at | read_at |
+------------------------------------------------------------------------------+
+----------------------------------------------------------------------------
| last_messages_by_conversation
+----------------------------------------------------------------------------
| message | from_username | sent_at | count_thread_msgs | count_unread_msg |
+----------------------------------------------------------------------------
select u.username,msg.message,m.sent_at,

(select count(*) from user_message where read=0 and to_usr_id=$$) as count_thread_msgs,

(select count(*) from user_message where to_usr_id= $$) as count_unread_msg

from users as u join user_messages as m

on u.id=m.id where u.id=$$ 
group by u.id;`
SELECT 
      users.id,
      users.username,
      user_messages.thread_id,
      user_messages.unread ,
      messages.message 
FROM users
LEFT JOIN (SELECT 
                 from_usr_id , 
                 msg_id,
                 count(thread_id)) as thread_id,
                 count(read_at) as  unread  
          FROM user_messages)as user_messages on user_messages.from_usr_id = users.id
LEFT JOIN messages on messages.id = user_messages.msg_id
SELECT   messages.message,
         users.username AS from_username,
         t.sent_at,
         t.count_thread_msgs,
         t.count_unread_msg
FROM     users_messages NATURAL JOIN (
  SELECT   thread_id,
           to_usr_id,
           MAX(sent_at)  AS sent_at,
           COUNT(*)      AS count_thread_msgs,
           SUM(NOT read) AS count_unread_msg
  FROM     users_messages
  WHERE    to_usr_id = ?
  GROUP BY thread_id
) t JOIN messages ON messages.id = users_messages.msg_id
    JOIN users    ON users.id    = users_messages.from_usr_id
SELECT   c.message,
         d.username AS from_username,
         b.sent_at,
         a.count_thread_msgs,
         a.count_unread_msg
FROM     (
         SELECT   MAX(id)  AS maxid,
                  COUNT(*) AS count_thread_msgs,
                  COUNT(CASE WHEN `read` = 0 AND <uid> = to_usr_id THEN 1 END) AS count_unread_msg
         FROM     users_messages
         WHERE    <uid> IN (from_usr_id, to_usr_id)
         GROUP BY thread_id
         ) a
JOIN     users_messages b ON a.maxid       = b.id
JOIN     messages c       ON b.msg_id      = c.id
JOIN     users d          ON b.from_usr_id = d.id
ORDER BY b.sent_at DESC
SELECT
  m.message,
  u.username from_username,
  um1.sent_at,
  um2.count_thread_msgs,
  um2.count_unread_msg
FROM users_messages um1
  JOIN (
       SELECT
         thread_id,
          MAX(sent_at) sent_at,
          COUNT(*) count_thread_msgs,
          COUNT(IF(`read` = 1, `read`, NULL)) count_unread_msg
        FROM users_messages GROUP BY thread_id) um2
    ON um1.thread_id = um2.thread_id AND um1.sent_at = um2.sent_at
JOIN messages m
  ON m.id = um1.msg_id
JOIN users u
  ON u.id = um1.from_usr_id
-- WHERE u.id = 100 -- specify user id here