MYSQL从表中选择最新的帖子


MYSQL select newest posts from tables

我想从用户中选择最新的帖子,我正在寻找最有效的方法。

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

$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个更新了状态的用户那里获得最新的状态。

ID在理论上仍然有效,前提是ID永远不会改变。。。

我建议在表结构中使用一个名为"日期"的时间戳字段,并使用"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

有时您会遇到GROUPED记录不按ORDER by排序的问题,因为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

尝试此查询。

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