【问题标题】:Select top 50 rows from a table, but display oldest to newest?从表中选择前 50 行,但显示最旧到最新?
【发布时间】:2014-12-29 02:53:39
【问题描述】:

有人可以建议如何解决这个问题吗?

我想从我的 SHOUTBOX 表中按 id 调用前 50 行,但在 div 中按升序显示它们(最近的行(最新的)在底部)

例如;

最近的一行是 id 200, 我想调用第 150 - 200 行, 将它们显示在 div 中;

150, 151, 152, . . 。ETC . . 200

我的 PHP 代码目前看起来像这样;

$recall=mysql_query("SELECT *, DATE_FORMAT(timepost,'%H:%i:%s') as timepost FROM shoutbox ORDER BY id DESC LIMIT 50");

    while($comm=mysql_fetch_object($recall)){
      if ($comm->poster == "System"){
      print"<font color=#3399FF>$comm->timepost-<strong><a href='profile.php?viewuser=$comm->poster' target='iframecontent'><font color=#3399FF>$comm->poster</font></a></strong>: </font>";
    echo replace($comm->post);
    echo"<br>";
      }

但它会在 div 中返回我的数据;

200, 199, 198, . . 。ETC . . 150

有人可以帮忙吗?

注意:我目前正在处理我的所有页面并将所有 mySQL 查询转换为 PDO

【问题讨论】:

    标签: php sql


    【解决方案1】:

    为了将来参考,如果您要转换为 PDO,则可以在此页面上向后阅读而不更改您的查询的确切答案。 http://www.php.net/manual/en/pdostatement.fetch.php.

    现在这将起作用:

    SELECT *, DATE_FORMAT(timepost,'%H:%i:%s') AS timepost FROM (SELECT * FROM shoutbox ORDER BY id DESC LIMIT 50) AS foo ORDER BY id ASC
    

    【讨论】:

    • 不,我的外观也不支持它。 (它抛出了 mysql 布尔错误。我现在正在查看您的 PDO 建议。向后阅读看起来完全符合我的需要。我也可以现在将此页面转换为 PDO 并完成它。
    • SELECT *, DATE_FORMAT(timepost,'%H:%i:%s') as timepost FROM (SELECT * FROM shoutbox ORDER BY id DESC LIMIT 50) AS table ORDER BY id ASC 应该可以工作。
    • no :( 不工作。第 89 行 - $recall=mysql_query("SELECT *, DATE_FORMAT(timepost,'%H:%i:%s') as timepost FROM (SELECT * FROM shoutbox ORDER BY id DESC LIMIT 50) AS table ORDER BY id ASC"); 第 92 行 - while($comm=mysql_fetch_object($recall)){ 我在第 92 行遇到相同的布尔错误。警告:mysql_fetch_object():提供的参数不是有效的 MySQL结果资源在 /home/*****/public_html/*******/shoutbox.php 第 92 行
    • 哦,table是关键字。我的错,将其命名为 foo 或其他名称 SELECT *, DATE_FORMAT(timepost,'%H:%i:%s') AS timepost FROM (SELECT * FROM shoutbox ORDER BY id DESC LIMIT 50) AS foo ORDER BY id ASC
    • 传奇!你的名声在前!编辑您的原始答案以反映“table/foo”评论并将其标记为已接受:D
    【解决方案2】:

    好的,试试这个:

    $recall=mysql_query("SELECT *, DATE_FORMAT(timepost,'%H:%i:%s') as timepost FROM (SELECT * FROM shoutbox ORDER BY id DESC LIMIT 50) ORDER BY id ASC");
    

    【讨论】:

    • 警告:mysql_fetch_object():提供的参数不是 /home/*******/public_html/**********/shoutbox 中的有效 MySQL 结果资源。第88行的php
    • 你可能需要一个内部选择的别名。
    • 嗯,使用这些方法似乎都无法正常工作。
    【解决方案3】:

    ORDER BY id DESC 替换为ORDER BY id

    【讨论】:

      【解决方案4】:

      你有错误的命令命令,你必须把ASC而不是DESC这是你正确的查询:

      $recall=mysql_query("SELECT *, DATE_FORMAT(timepost,'%H:%i:%s') as timepost FROM shoutbox ORDER BY id ASC LIMIT 50");
      
          while($comm=mysql_fetch_object($recall)){
            if ($comm->poster == "System"){
            print"<font color=#3399FF>$comm->timepost-<strong><a href='profile.php?viewuser=$comm->poster' target='iframecontent'><font color=#3399FF>$comm->poster</font></a></strong>: </font>";
          echo replace($comm->post);
          echo"<br>";
            }
      

      【讨论】:

      • 我的表中有超过 50 行。我已经尝试过了,它没有返回最近的 50 行。 :\
      【解决方案5】:

      将您的查询更改为:

      $recall = mysql_query("SELECT *, DATE_FORMAT(timepost,'%H:%i:%s') as timepost 
         FROM shoutbox ORDER BY id ASC LIMIT 50");
      

      【讨论】:

      • 如果你只是把 DESC 改成 ASC 它总是从 0-50 开始,他在找 150-200
      猜你喜欢
      • 1970-01-01
      • 2014-02-26
      • 2021-10-14
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多