php - 类似 Facebook 的消息系统 - 按最后回复排序

标签 php mysql database messaging

我正在构建一个类似于 Facebook 的消息系统(它将消息显示为线程)。

我当前的表格设计是:

CREATE TABLE IF NOT EXISTS messages ( 
  mid int(11) NOT NULL auto_increment,
 subject text NOT NULL,
  message text NOT NULL,
  fromid varchar(255) NOT NULL default '',
  toid varchar(255) NOT NULL default '',
  status varchar(255) NOT NULL default '',
  date varchar(255) NOT NULL default '',
  time varchar(255) NOT NULL,
  PRIMARY KEY  (mid)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2825 ;`

我正在使用此 select 语句检索结果:

SELECT 
  IF(messages.toid = '$uid' OR messages.toid = '$uid', messages.fromid, messages.toid) friend1,
messages.message, messages.fromid, messages.toid, messages.date, messages.status, messages.time
FROM messages 
WHERE (messages.toid='$uid' OR messages.fromid='$uid') 
  AND messages.status!='2' 
GROUP BY friend1 ASC 
ORDER BY messages.time DESC, messages.mid DESC

这给了我正确的结果,除了它显示线程中的第一个帖子,我希望它显示线程中的最新帖子。

我做错了什么?

最佳答案

这是一篇与您的问题直接相关的好文章:http://kristiannielsen.livejournal.com/6745.html

针对您的具体问题进行大胆尝试,您的查询可能需要如下所示(未经测试!):

SELECT 
  IF(derived_messages.toid = '$uid', derived_messages.fromid, 
    derived_messages.toid) friend1,
  derived_messages.message, derived_messages.fromid, derived_messages.toid,
  derived_messages.date, derived_messages.status, derived_messages.time
FROM 
  (SELECT * 
  FROM messages
  ORDER BY time desc) derived_messages
WHERE (derived_messages.toid='$uid' OR derived_messages.fromid='$uid') 
  AND derived_messages.status!='2' 
GROUP BY friend1 ASC 
ORDER BY derived_messages.time DESC, derived_messages.mid DESC

顺便说一句,这个条款对我来说看起来很可疑(在你原来的帖子中):

IF(messages.toid = '$uid' OR messages.toid = '$uid',
  messages.fromid, messages.toid) friend1

相同条件之间的“OR”有何作用?我认为你可能可以跳过第二个条件。

关于php - 类似 Facebook 的消息系统 - 按最后回复排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10275297/

相关文章:

php - 根据关系表值从另一个表中选择

mysql - 如何管理大型视频数据库?

php - 如何使用 apache solr 搜索日期

php变量没有被值替换

javascript - 奇怪的 AJAX 错误 : not getting a response on AJAX call while getting a response when doing the exact call with different values

mysql - 如何在mysql中打印字符串变量

php - 无法在 C :\wamp\www\zr\core\functions\users. php 中重新分配自动全局变量 _POST

php - 访问 Jquery/AJAX 发送的 $_POST 数据

mysql联合查询,每个联合上都有单独的别名

mysql - 在数据库中设置名称的最佳做法是什么?