如何使用Cron脚本处理大量MySQL行

我正在编写一个PHP Cron脚本,它将从论坛部分获取所有主题并迭代查看它们是否符合某些条件(例如,如果它们大于2年) 。如何使用Cron脚本处理大量MySQL行

通常我会做:

SELECT DATE_CREATED FROM `threads` 

WHERE BOARD = board_id

AND (YEAR(NOW()) - YEAR(DATE_CREATED)) >= 2

,然后循环相应。

现在有趋势,可能有100万或更多的线程符合这个标准。

起初,我认为不会有任何需要限制返回的行,因为它是一个cron脚本

现在我想通,可能有一些内存的问题时,返回的行变成真的很大。

这是我需要帮助如何有效地循环通过Cron作业执行的PHP脚本中的数千个MySQL记录。

我曾想过使用LIMIT,然后遍历它作为分页内容,但我想知道是否有更有效的方法来做到这一点;希望只在MySQL服务器上。

在此先感谢。

回答:

1 - 首先解决方案 - 使用限制和偏移会是这样的(伪代码):

//get total number of rows 

$total_rows = $db->$query("SELECT COUNT(*) FROM `threads`

WHERE BOARD = board_id

AND (YEAR(NOW()) - YEAR(DATE_CREATED)) >= 2");

//put in your array or wherever you need 1000 rows at a time

for($i = 0; $i < $total_rows/1000; i++){

$array << $db->query("SELECT DATE_CREATED FROM `threads`

WHERE BOARD = board_id

AND (YEAR(NOW()) - YEAR(DATE_CREATED)) >= 2

LIMIT ($i+1, $i+1)*1000");

}

2 - 解决方案:让行逐月,考虑到你只有二年(假设2016- 2017)为了简单起见,您可以做类似

$base_year = 2016; 

//nest loops for the years and for the months

for($i = 0; $i < 2; $i++){

for($j = 0; j < 12; $j++){

$array << $db->query("SELECT DATE_CREATED FROM `threads`

WHERE BOARD = board_id

AND YEAR(DATE_CREATED) = ($i + $base_year)

AND MONTH(DATE_CREATED = ($j+1)");

}

}

希望这可以帮助您找到合适的,更适合您的方式。

以上是 如何使用Cron脚本处理大量MySQL行 的全部内容, 来源链接: utcz.com/qa/257738.html

回到顶部