php + mysql =选择并显示具有不同日期的行

时间:2011-04-17 11:29:21

标签: php mysql mktime

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

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

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

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

日期:2011年4月15日

  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
  4. 日期: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。日期:2011年4月11日14:11
    4. 日期: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 个答案:

答案 0 :(得分:2)

您应该使用ORDER BY子句按日期订购结果:

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

然后你可以使用PHP date function传递date列的值作为第二个参数:

// 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']);
    ...
}

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

答案 1 :(得分:0)

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

遵循一个查询策略,您只需获取数据并按时订购。在另一行中,您使用sql函数UNIX_TIMESTAMP()

获取表示日期的时间戳

有这个时间戳,你可以使用php将结果集分成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 . ');';

答案 2 :(得分: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更轻松地进行细粒度控制。

答案 3 :(得分: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'];