家伙!我从来没有遇到过在日期之间选择明确的行并正确排序它们。任何帮助对于理解我应该如何组织php + mysql脚本非常有用。
我有一个包含mktime()格式的日期列的行的表。此表存储我网站上广告点击的信息。
这是我clicks_log
表的结构:
1)ID - 具有自动增量的行的唯一ID。
2)日期 - 当有人点击链接时,以mktime格式表示日期。
3)IP - 点击链接的访问者的IP地址。
我想从clicks_log
表中选择所有信息并在页面上显示如下:
答案 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'];