【问题标题】:MYSQL select newest posts from tablesMYSQL 从表中选择最新的帖子
【发布时间】:2012-01-11 06:33:37
【问题描述】:

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

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

$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 位用户那里获取最新状态。

【问题讨论】:

  • toID=fromID 有什么用?它会影响您的结果集吗?
  • 您应该为最新帖子使用时间戳。
  • 我确实有时间戳,但 id 的作用与时间戳相同。 (它是自动增量)
  • 您的表格中是否有任何日期或时间戳字段。 toID 和 fromID 是什么?你能提供表结构吗
  • 我已经更新了答案

标签: php mysql select


【解决方案1】:

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

我建议在表结构中使用名为“date”的时间戳字段,并使用“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

【讨论】:

  • 我知道,我想获取每个用户的最新状态。看看我上面编辑过的帖子,我用一个例子添加了更多细节
  • 是的,我希望每个用户只有 1 个状态,并且它必须是每个用户的最新状态。
【解决方案2】:

试试这个查询。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2012-07-28
    • 2011-10-11
    • 2020-05-06
    • 1970-01-01
    相关资源
    最近更新 更多