我想从用户那里选择最新的帖子,我正在寻找最有效的方法来做到这一点。
目前,这会选择第一个帖子,而不是最后一个帖子:
$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位已更新其状态的用户获取最新状态。
答案 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");