MYSQL从表中选择最新的帖子

时间:2012-01-11 06:33:38

标签: php mysql select

我想从用户那里选择最新的帖子,我正在寻找最有效的方法来做到这一点。

目前,这会选择第一个帖子,而不是最后一个帖子:

$query = mysql_query("
                     SELECT * 
                     FROM posts 
                     WHERE toID=fromID 
                     GROUP BY fromID 
                     ORDER BY date DESC LIMIT 3");

表格结构:

表:帖子

id  ToID    FromID  Post        State   Date
1   1       1       Hey         0       1325993600
2   1       6       okay yeah   0       1325993615
3   1       2       again       0       1325994600
4   6       6       yeah2       0       1325995615

所以从上面这个例子中它将返回id:1和4。

toID = fromID只是为了获取状态消息的帖子,这意味着用户在自己的页面上发布了一些内容,而不是其他人。

我希望从最近3位已更新其状态的用户获取最新状态。

2 个答案:

答案 0 :(得分:2)

如果ID永远不会改变,理论上ID仍然可以工作......

我建议在名为“date”的表结构中使用timestamp字段,并使用“CURRENT_TIMESTAMP”作为默认值,这将在插入时自动填充记录上的日期/时间...

按此字段排序DESC,限制x

此外,由于分组,我遇到了许多错误数据出现的情况......在应用ORDER BY和LIMIT之前确保您的数据正确

要获取从user1到user1的帖子,无需按以下方式分组:

SELECT * FROM posts 
WHERE toID=fromID
ORDER BY date DESC LIMIT 3

从*到user1获取帖子:

SELECT * FROM posts 
WHERE toID="USER1_ID"
ORDER BY date DESC LIMIT 3

要将帖子从*发送到user1,只有唯一身份用户:

SELECT * FROM posts 
WHERE toID="USER1_ID"
GROUP BY FromID
ORDER BY date DESC LIMIT 3

有时你会遇到ORDER BY没有订购GROUPED记录的问题,因为在应用分组后ORDER BY应用于结果...要实现变通方法:

SELECT * FROM (
  SELECT * FROM posts 
  WHERE toID="USER1_ID"
  ORDER BY date DESC
) as `derived` GROUP BY FromID LIMIT 3

要获得最近向自己发送帖子的最后3位用户:

SELECT * FROM (
  SELECT * FROM posts 
  WHERE toID=fromID
  ORDER BY date DESC
) as `derived` GROUP BY FromID LIMIT 3

答案 1 :(得分:0)

尝试此查询。

$query = mysql_query("SELECT * FROM posts WHERE toID=fromID GROUP BY id ORDER BY date DESC LIMIT 3");