需要帮助mysql / php输出数据

时间:2009-08-05 20:52:08

标签: php mysql

好的,我有一个包含2列的列表:代码和日期。

我想显示LATEST 25并告诉用户他们提交的时间。

所以,例如:

ABCDEF (1 Second Ago)
CCDEE (12 Seconds Ago)
329492 (45 Minutes Ago)

我已经走到这一步了:

$result = mysql_query("SELECT `code` FROM `fc` ORDER by datetime LIMIT 25") or die(mysql_error());

但是,它没有做我想要的。它反过来。它显示了首先输入的内容,而不是最后一次。

我的输出如下:

$output .= "<li><a href=\"http://www.***=" . htmlspecialchars(urlencode($fetch_array["code"])) . "\" target=\"_blank\">" . htmlspecialchars($fetch_array["code"]) . "</a></li>";

我不知道如何添加(时间)部分。

帮助?

谢谢:)

5 个答案:

答案 0 :(得分:2)

尝试使用

order by datetime desc

然后在PHP中获取当前时间,减去查询返回的时间,然后查看此SO question about relative time以正确的单位显示您的时间。

答案 1 :(得分:2)

考虑ORDER BY datetime DESC向另一个方向排序。

考虑将datetime添加到SELECT列表中,以便您可以在PHP中访问发布日期。然后,您可以使用PHP日期/时间函数来计算当前日期和发布日期之间的差异,以计算发布过期的时间。

添加:一些代码来计算自友好格式发布以来的时间。

$seconds = time() - strtotime($fetch_array["datetime"]);

if($seconds < 60)
    $interval = "$seconds seconds";
else
    if($seconds < 3600)
         $interval = floor($seconds / 60) . " minutes";
    else
        if($seconds < 86400)
             $interval = floor($seconds / 3600) . " hours";
        else
             $interval = floor($seconds / 86400) . " days";
 // You can keep on going

最后$interval包含间隔

的文字表示

答案 2 :(得分:0)

如果我理解正确的问题,问题在于您没有指定排序顺序。 如果您想获取最新的帖子,您必须指定后代订单。

$ result = mysql_query(“SELECT code FROM fc ORDER by datetime DESC LIMIT 25”)或die(mysql_error());

答案 3 :(得分:0)

修正排序:

"SELECT `code`, `datetime` FROM `fc` ORDER by datetime DESC LIMIT 25"

为了获得时间差异,这样的事情应该有效。请注意,您应该将其重构为更好的方法,删除“幻数”等(它也可以扩展为更复杂):

function getTimeAgo ($dateTime) {
    $timestamp = new DateTime($dateTime);
    $currentTimestamp = new DateTime();

    $diff = $currentTimestamp->getTimestamp() - $timestamp->getTimestamp();

    if($diff < 0) {
        throw new Exception (__METHOD__ . ':parameter $dateTime can not be 
                                           in the future!');
    }
    if($diff < 60) {
       return "$diff seconds ago";
    }
    if($diff < 3600) {
       return $diff/60 . " minutes ago";
    }
    if($diff < 86400) {
       return $diff/3600 . " hours ago";
    }
}

答案 4 :(得分:0)

更改日期时间顺序 在ORDER BY结束时尝试使用DESC或ASC。这应该可以解决问题:

SELECT code
FROM fc
ORDER BY datetime DESC
LIMIT 25

时间: 编写或查找将MySQL日期时间格式转换为“真正英语”的PHP函数。这是一个快速的基本示例:

<?php

// your code goes here
$timeStr = "2009-08-01 15:43:34";
$time = Sec2Time( time() - strtotime($timeStr) );
print_r($time);

// this converts mysql datetime into english
//   borrowed from http://ckorp.net/sec2time.php
function Sec2Time($time){
  if(is_numeric($time)){
    $value = array(
      "years" => 0, "days" => 0, "hours" => 0,
      "minutes" => 0, "seconds" => 0,
    );
    if($time >= 31556926){
      $value["years"] = floor($time/31556926);
      $time = ($time%31556926);
    }
    if($time >= 86400){
      $value["days"] = floor($time/86400);
      $time = ($time%86400);
    }
    if($time >= 3600){
      $value["hours"] = floor($time/3600);
      $time = ($time%3600);
    }
    if($time >= 60){
      $value["minutes"] = floor($time/60);
      $time = ($time%60);
    }
    $value["seconds"] = floor($time);
    return (array) $value;
  }else{
    return (bool) FALSE;
  }
}

?>

输出是:

Array ( [years] => 0 [days] => 4 [hours] => 5 [minutes] => 29 [seconds] => 38 )

希望有所帮助