【问题标题】:Displaying messages from the database the other way round以相反的方式显示来自数据库的消息
【发布时间】:2012-07-14 16:43:37
【问题描述】:

我正在尝试使消息显示为这样

*旧消息

很快的消息

更新消息

最新消息*

我尝试了几种不同的方法。通过放

  SELECT * FROM place_chat WHERE whereto = '".mysql_real_escape_string($where)."' ORDER BY     id DESC LIMIT 7"

^ 但这只是在顶部显示最新消息的结果,所以我尝试了这个。

  SELECT * FROM place_chat WHERE whereto = '".mysql_real_escape_string($where)."' ORDER BY     id ASC LIMIT 7" 

^ 但后来我发布了它只会显示最旧的消息,而不是调整它的显示方式并确保并对其进行测试。它只显示最旧的消息。

有人可以解释一下这样做的方法吗?我已经尝试了一段时间了。

【问题讨论】:

  • 请您澄清一下,您只想要 7 条消息,如果超过 7 条消息会显示什么,只有 7 条最新消息?
  • 所以你想要倒序排列最后 7 个项目...?
  • 是的克雷格。抱歉,我应该更清楚一点。

标签: php mysql messages limits


【解决方案1】:

您需要先获取最新的 7 条记录,然后重新排序:

SELECT *
FROM
(
    SELECT *
    FROM place_chat 
    WHERE whereto = mysql_real_escape_string($where)
    ORDER BY id DESC
    LIMIT 7
) newest_place_chat
ORDER BY id ASC

【讨论】:

  • 感谢您的回复。我在使用它时遇到了麻烦。我有 SELECT * FROM SELECT * FROM place_chat WHERE whereto = '".mysql_real_escape_string($where)."' ORDER BY id DESC LIMIT 7 )newest_place_chat ORDER BY id ASC" 但是,这似乎不起作用。
  • @JordanRichards 看起来您缺少子选择中的左括号...
【解决方案2】:

由于您设置了标签“php”,我假设您从 php 脚本中查询数据库,该脚本还将查询结果转换为输出,在这种情况下很可能是 html 表。

您可以简单地将遍历 php.ini 中结果数组的顺序颠倒过来。这样您就不必更改查询中的任何内容。

【讨论】:

  • 虽然可以,但最好直接从数据库中获取正确的结果。
  • 为什么?由于无论如何您都必须遍历结果集,因此速度或负载不会受到影响。恰恰相反:您可以通过这种方式使查询更简单,因为您不需要子选择。
  • 处理这些事情是数据库的工作。尽管查询看起来更复杂,但数据库执行操作的速度非常快。此外,如果您想在另一个页面或另一个平台上显示完全相同的数据,最好让查询为您提供应有的数据,而不是实现多个不同的查询后代码来反转结果的顺序.
  • 我明白你想要表达的意思。总的来说,我同意你的观点:保持数据源尽可能干净。但是在这种情况下,没有“多个”“不同”实现。结果必须遍历,没有额外的代码。零。你试图让它看起来更复杂,更圆角,就像它实际上一样。为什么?
  • AFAIK,向后遍历数据库结果的唯一方法是使用 mysqli_store_result 或类似函数。正常遍历结果时,您使用 ***_fetch_row 函数之一,该函数始终按照从数据库接收到的顺序遍历它。所以我不同意“不会有额外的代码”,除非你能给我一个例子。数据库结果应按照从数据库接收到的顺序进行处理。
猜你喜欢
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 2013-05-19
相关资源
最近更新 更多