我想从用户中选择最新的帖子,我正在寻找最有效的方法。
目前,这选择了第一个帖子,而不是最后一个:
$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");