获取最新的消息我有我得到需要的消息系统的主要页面(包括未读邮件数等)的全部信息查询......但当前检索原线程的消息。我想扩充下面的查询,以便在每个线程中获取最近的最近的消息。在一个线程
这个查询是非常接近,但我平庸的SQL技能让我从包裹的东西了......
$messages = array();
$unread_messages_total = 0;
$messages_query = "
SELECT m.*
, COUNT(r.id) AS num_replies
, MAX(r.datetime) AS reply_datetime
, (m.archived NOT LIKE '%,".$cms_user['id'].",%') AS message_archive
, (m.viewed LIKE '%,".$cms_user['id'].",%') AS message_viewed
, SUM(r.viewed NOT LIKE '%,".$cms_user['id'].",%') AS unread_replies
, CASE
WHEN MAX(r.datetime) >= m.datetime THEN MAX(r.datetime)
ELSE m.datetime
END AS last_datetime
FROM directus_messages AS m
LEFT JOIN directus_messages as r ON m.id = r.reply
WHERE m.active = '1'
AND (m.to LIKE '%,".$cms_user['id'].",%' OR m.to = 'all' OR m.from = '".$cms_user['id']."')
GROUP BY m.id
HAVING m.reply = '0'
ORDER BY last_datetime DESC";
foreach($dbh->query($messages_query) as $row_messages){
$messages[] = $row_messages;
$unread_messages_total += (strpos($row_messages['archived'], ','.$cms_user['id'].',') === false && ((strpos($row_messages['viewed'], ','.$cms_user['id'].',') === false && $row_messages['unread_replies'] == NULL) || ($row_messages['unread_replies']>0 && $row_messages['unread_replies'] != NULL)))? 1 : 0;
}
预先感谢任何帮助,您可以提供!
编辑:(数据库)
CREATE TABLE `cms_messages` (
`id` int(10) NOT NULL auto_increment,
`active` tinyint(1) NOT NULL default '1',
`subject` varchar(255) NOT NULL default '',
`message` text NOT NULL,
`datetime` datetime NOT NULL default '0000-00-00 00:00:00',
`reply` int(10) NOT NULL default '0',
`from` int(10) NOT NULL default '0',
`to` varchar(255) NOT NULL default '',
`viewed` varchar(255) NOT NULL default ',',
`archived` varchar(255) NOT NULL default ',',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
编辑2:(要求)
- 返回所有父消息为特定
user_id
:$cms_user['id']
- 返回答复该数量父母消息:
num_replies
- 返回数字个未读答复,该父消息:
unread_replies
- 返回父消息的日期或者是最近的答复:
last_datetime
- 返回的消息是否是在存档:
message_archive
- 返回的消息是否已经浏览:
message_viewed
- 返回在DESC日期时间顺序
- 返回最新
message
所有消息,从父或回复,如果有一些(例如Gmail)
可以附加表模式?以及如何识别最近消息的逻辑。 thanx – yoavmatchulsky 2011-06-29 06:35:10
@yoavmatchulsky - 架构添加。行可以是父消息('reply = 0')或回复('reply = parent_id')。如果没有答复,我想要父消息,否则最近的答复(由datetime DESC排序的那个父消息ID的最新答复)。那有意义吗? – RANGER 2011-06-29 06:46:26
你有很深的嵌套信息吗?或只是一个级别? – yoavmatchulsky 2011-06-29 06:59:18