首页 / PHP / 如何将PHP循环转换为MySQL查询?
如何将PHP循环转换为MySQL查询?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何将PHP循环转换为MySQL查询?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1688字,纯文字阅读大概需要3分钟。
内容图文
![如何将PHP循环转换为MySQL查询?](/upload/InfoBanner/zyjiaocheng/882/d2f62929e05b41f5bc54304511b54744.jpg)
我正在尝试使MySQL的PHP??循环为我工作.当前,所有通过特定URL参数对网站的访问以及访问的日期和时间都记录在一个表中.我正在重新构建日志记录过程,以仅在一天中通过一个特定参数对访问进行计数,但是我必须先转换旧数据.
因此,这就是我想要做的事情:MySQL表(我们称其为my_visits)具有3列:参数,visit_id和时间.
在我的PHP代码中,我创建了以下循环来收集所需的数据(所有一天通过一个参数进行的所有访问,针对所有参数):
foreach (range(2008, 2014) as $year) {
$visit_data = array();
$date_ts = strtotime($year . '-01-01');
while ($date_ts <= strtotime($year . '-12-31')) {
$date = date('Y-m-d', $date_ts);
$date_ts += 86400;
// count visit data
$sql = 'SELECT parameter, COUNT(parameter) AS total ' .
'FROM my_visits ' .
'WHERE time BETWEEN \''.$date.' 00:00\' AND \''.$date.' 23:59\' '.
'GROUP BY parameter ORDER BY total DESC';
$stmt = $db->prepare($sql);
$stmt->execute(array($date));
while ($row = $stmt->fetch()) {
$visit_data[] = array(
'param' => $row['parameter'],
'visit_count' => $row['total'],
'date' => $date);
}
$stmt->closeCursor();
}
}
稍后,使用多个INSERT(感谢SO!:)将收集到的数据插入到新表中(基本上消除了visit_id).
上面的代码可以工作,但是由于表的大小(大约340万行),它非常慢.仅使用7 * 365 SQL查询来收集数据对我来说似乎是错误的,我担心仅运行脚本的影响会大大降低一切.
有没有一种方法可以使此循环在MySQL中工作,例如等效查询或类似的事情(可能每年一次)?我已经尝试过使用GROUP BY的解决方案,但是由于这消除了特定的日期或参数,因此无法正常工作.
解决方法:
您可以进一步分组.
SELECT `parameter`, COUNT(`parameter`) AS `total`, DATE(`time`) AS `date`
FROM `my_visits`
GROUP BY `parameter`, DATE(`time`)
然后,您可以执行一次(而不是循环执行),并使用$row [‘date’]代替$date.
这也意味着您在2015年到达时不必更新代码;)
内容总结
以上是互联网集市为您收集整理的如何将PHP循环转换为MySQL查询?全部内容,希望文章能够帮你解决如何将PHP循环转换为MySQL查询?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。