这是我的代码,它将显示创建组时所有聊天消息组和消息ORDERED BY。
我试图改为通过收到的最后一条消息来命令消息组列表(确切地说imessage或任何文本消息是如何工作的)
您目前没有消息。 <div id="messagegroups">
<?php while($row_messages = mysqli_fetch_assoc($sql_messages)){ ?>
<?php
$snm = mysqli_query($connect, "SELECT * FROM message_group WHERE group_id = '$row_messages[group_id]' ORDER BY id DESC");
$rm = mysqli_fetch_assoc($snm);
$nm = mysqli_num_rows($snm);
$ur = mysqli_query($connect, "SELECT * FROM users WHERE username = '$rm[recipients]' ORDER BY id DESC;");
$rr = mysqli_fetch_assoc($ur);
$um = mysqli_query($connect, "SELECT * FROM messages WHERE group_id = '$row_messages[group_id]' ORDER BY id DESC;");
$rrr = mysqli_fetch_assoc($um);
?>
<div id="messagegroupholder">
<div class="qo cj ca js-msgGroup groupclick" id="msg" data-id="<?php echo $rm['group_id']; ?>">
<a class="b">
<div class="qf">
<span class="qj">
<img class="cu qh" src="./img/<?php echo $rr['image']; ?>" style="height: 42px; width: 42px;">
</span>
<div class="qg">
<strong><?php echo $rr['username']; ?></strong> and <strong><?php echo $nm - 1 ?> others</strong>
<div class="aof">
<?php echo substr($rrr['message'], 0, 60); ?> …
</div>
</div>
</div>
</a>
</div>
</div>
<?php } ?>
<?php } ?>
</div>
MySQL Structure:
-- --------------------------------------------------------
--
-- Table structure for table `messages`
--
CREATE TABLE IF NOT EXISTS `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
`message` text NOT NULL,
`ipaddress` varchar(100) NOT NULL,
`timestamp` int(11) NOT NULL,
`group_id` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=318 ;
-- --------------------------------------------------------
--
-- Table structure for table `message_group`
--
CREATE TABLE IF NOT EXISTS `message_group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
`recipients` varchar(255) NOT NULL,
`group_id` varchar(20) NOT NULL,
`ipaddress` varchar(100) NOT NULL,
`timestamp` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=82 ;
--
-- Table structure for table `users`
--
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`email` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
`user_level` int(11) NOT NULL DEFAULT '0',
`name` varchar(100) NOT NULL,
`image` varchar(100) NOT NULL DEFAULT 'default.png',
`profile_background` varchar(255) NOT NULL DEFAULT 'default_background.png',
`description` varchar(255) NOT NULL,
`went_to_school` varchar(100) NOT NULL,
`worked_at` varchar(100) NOT NULL,
`lives_in` varchar(100) NOT NULL,
`from_originally` varchar(100) NOT NULL,
`expires` datetime NOT NULL,
`ipaddress` varchar(50) NOT NULL,
`browser` varchar(100) NOT NULL DEFAULT 'n/a',
`show_email` int(11) NOT NULL DEFAULT '1',
`timestamp` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
以下是数据存储方式的预览:http://imgur.com/fdG2n0g
那么我该如何通过收到的最后一条消息而不是最后一个组创建时来命令message_groups?
答案 0 :(得分:0)
首先你可以做一个MAX()和GROUP BY来获取每个group_id的最新时间戳,如
SELECT MAX(timestamp) as latestTimeStamp,group_id
FROM messages
GROUP BY group_id
然后你可以把那个内部查询表称为M,其中包含带有message_groups的latestTimeStamp和INNER JOIN,如
SELECT MG.*,M.latestTimeStamp
FROM message_groups MG
INNER JOIN
(SELECT MAX(timestamp) as latestTimeStamp,group_id
FROM messages
GROUP BY group_id)as M
ON MG.group_id = M.group_id
ORDER BY M.latestTimeStamp DESC