Нужна помощь с выводом данных mysql / php - PullRequest
1 голос
/ 06 августа 2009

Хорошо, у меня есть таблица списка с 2 столбцами: коды и даты.

Я хочу отобразить последние 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 ]

2 голосов
/ 06 августа 2009

Рассмотрим 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 голосов
/ 06 августа 2009

Попробуйте использовать

order by datetime desc

Затем в PHP возьмите текущее время, вычтите время, возвращаемое из запроса, а затем посмотрите на этот ТАК вопрос об относительном времени , чтобы отобразить ваше время в надлежащих единицах.

0 голосов
/ 06 августа 2009

Изменение даты / времени заказа: Попробуйте DESC или ASC в конце вашего заказа. Это должно сделать трюк:

SELECT code
FROM fc
ORDER BY datetime DESC
LIMIT 25

Время с: Написать или найти функцию PHP, которая преобразует формат даты и времени MySQL в «настоящий английский» Вот простой пример:

<?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 )

Надеюсь, это поможет

0 голосов
/ 06 августа 2009

Чтобы исправить порядок:

"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";
    }
}
0 голосов
/ 06 августа 2009

Если я правильно понял вопрос, проблема в том, что вы не указываете порядок сортировки. Если вы хотите получать последние сообщения, вы должны указать порядок следования.

$ result = mysql_query ("SELECT code FROM fc ЗАКАЗАТЬ по дате и времени DESC LIMIT 25") или die (mysql_error ());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...