1

伙计们!我从来没有遇到过在日期之间选择确定的行并将它们正确排序。任何帮助对于了解我应该如何组织 php + mysql 脚本都非常有用。

我有一个表,其中包含 mktime() 格式的日期列的行。此表存储我网站上的广告点击信息。

这是我的clicks_log表的结构: 1) ID - 具有自动增量的行的唯一 ID。2) DATE - 当有人点击链接时,mktime 格式的日期。3) IP - 点击链接的访问者的 IP 地址。

我想从clicks_log表格中选择所有信息并显示在页面上,如下所示:

日期:15.04.2011

  1. IP 地址:192.168.0.1。日期:08:45, 15.04.2011
  2. IP 地址:192.168.0.2。日期:13:22, 15.04.2011
  3. IP 地址:192.168.0.3。日期:18:58, 15.04.2011

日期:16.04.2011

  1. IP 地址:192.168.0.1。日期:04:14, 16.04.2011
  2. IP 地址:192.168.0.2。日期:09:35, 16.04.2011
  3. IP 地址:192.168.0.3。日期:14:11, 16.04.2011

日期:17.04.2011

  1. IP 地址:192.168.0.1。日期:21:56, 17.04.2011
  2. IP 地址:192.168.0.2。日期:23:04, 17.04.2011
  3. IP 地址:192.168.0.3。日期:23:13, 17.04.2011
4

4 回答 4

2

您应该使用ORDER BY子句按日期对结果进行排序:

SELECT *
FROM `clicks_log`
ORDER BY `date` ASC;

然后您可以使用PHP 日期函数将日期列的值作为第二个参数传递:

// Get the first date
$dateSection = ...;
while ($row = mysql_fetch_assoc($result)) {
    ...

    // Check here if the date header has changed to begin a new section
    $dateHeader = date("d.m.Y", $row['date']);
    if ( $dateHeader !== $dateSection ) {
        // Build new section header here
        ...
        $dateSection = $dateHeader;
    }

    ...
    echo $row['ip'];
    ...
    echo date("H:i, d.m.Y", $row['date']);
    ...
}

我省略了获取$dateSectionand$result变量的代码,但是 PHP 文档中有很多示例。

于 2011-04-17T11:39:36.450 回答
0

您有两种可能性,要么在一个查询中获取数据(我的建议),要么使用 3 个查询。

遵循一种查询策略,您只需获取数据并按时间排序。在另一行中,您使用 sql 函数 UNIX_TIMESTAMP() 获取表示日期的时间戳

有了这个时间戳,您就可以使用 php.ini 将结果集划分为 3 个结果集。

另一种方法是为每个日期生成一个查询。为此,您可以使用 php funktion mktime 来获取 $a = (0:00 15.04) 的时间。和 $b=(23:59 15.04)。在 mysql 查询的 where 条件中,您只需添加一个 between 语句。选择的日期必须是 $a 和 $b

where tbl.`date` between FROM_UNIXTIME( ' . $a . ') AND FROM_UNIXTIME( ' . $b . ');';
于 2011-04-17T11:40:03.860 回答
0
for ($i = 15; $i <= $current_day_of_month; $i++) {
        // SELECT * FROM clicks_log WHERE DATE LIKE '% $i.04.2011' ORDER BY DATE ASC;
        // print the result
}

通常最好将日期存储为 Unix 时间戳。这允许使用SELECT.

于 2011-04-17T11:41:24.130 回答
0

您将需要选择按日期升序排列的数据:

 $sql = "SELECT ip, date FROM clicks_log table ORDER BY date ASC";

然后在 PHP 中处理数据以将其拆分为天以用于输出:

 $date = date_parse($row['date']);
 $year = $row['year'];
 $month = $row['month'];
 $day = $row['day'];
于 2011-04-17T11:43:15.533 回答