【发布时间】:2013-12-22 09:49:24
【问题描述】:
很久以前我做了一个非常丑陋的 SQL 表。但现在我需要使用其中的数据。
该表如下所示:
id => 1
video_id => gds1513sfsd51
user_ip => 244.154.16..
datum => 2011-01-11 10:10:10
referer => http://something.com
user_id => 1
我希望这些行超过 30 天,但我想通过 video_id 和 order id desc 来 group 他们
所以,这些是行
id video_id ip datum user_id
527557 152547560451c58ca74e2e8 162.217.250.110 2013-11-18 21:53:10 1
527556 152547560451c58ca74e2e8 162.217.250.110 2013-11-18 21:53:07 1
527369 152547560451c58ca74e2e8 162.217.250.110 2013-11-18 21:37:03 1
515760 152547560451c58ca74e2e8 108.178.60.2 2013-11-15 02:33:45 1
515763 252547560451c58ca74e2e9 108.178.60.2 2013-10-15 02:33:45 2
515764 252547560451c58ca74e2e9 108.178.60.5 2013-10-14 02:33:45 2
我只想获取 id 为 515763 的行,因为那已经超过一个月了,并且没有更新的 video_id 。
我已经尝试过制作这样的东西:
$format = 'Y-m-j G:i:s';
$date = date ( $format );
// - 1 month from today
$datum = date ( $format, strtotime ( '-1 month' . $date ) );
$query = 'SELECT * FROM video_megtekintes WHERE datum <= "'.$datum.'" group by video_id order by id desc LIMIT 100';
print($query.'<hr>');
$le = mysql_query($query);
while($i = mysql_fetch_assoc($le)){
print($i["video_id"].' - '.$i["datum"].'');
$ok = mysql_fetch_assoc(mysql_query('SELECT * FROM video_megtekintes WHERE video_id="'.$i["video_id"].'" ORDER BY id DESC LIMIT 1'));
print(' - <b>'.$ok["datum"].'</b><br>');
//
但是现在的输出是这样的: (video_id | datum | 和最新行的数据具有相同的video_id)
video_id datum from_a_new_query_it_shows_me_there_is_newer
1000657739521a10654224f - 2013-08-25 19:15:26 - 2013-12-05 05:56:20
100155265051bde3b822f84 - 2013-06-18 20:59:31 - 2013-11-04 23:48:06
10024035651dc34f02b5d4 - 2013-07-14 10:10:52 - 2013-10-04 19:57:06
我不想看到第一行,因为它有两个日期。那个 video_id 的日期比一个月新。请帮帮我好吗?
这是查询:
$query = 'SELECT * FROM video_megtekintes WHERE datum <= "'.$datum.'" group by video_id order by id desc LIMIT 100';
【问题讨论】:
-
目前还不清楚(至少对我而言),产生所示结果集的查询是什么。此外,如果您不想看到第一行,那么您也不想看到其他 2 行,对吗?
-
你试过
ORDER BY datum DESC而不是ORDER BY id吗? -
数据 > DATE_SUB(NOW(),INTERVAL 1 MONTH) AND NOW()
-
如果这是产生该输出的查询,那么当您选择的表只有 1 个日期列时,为什么输出包含 2 个日期字段?
-
这部分
$datum = date ( $format, strtotime ( '-1 month' . $date ) );错了,应该是逗号而不是句号:strtotime ( '-1 month', $date )
标签: php mysql date group-by sql-order-by