我使用此代码从mysql tabe生成html表。表有200k行。
$view->ach = $db->Query("SELECT from_unixtime(`date`), `aav_id`, `aav_domain`, `aav_word`, `aav_referer`, `aav_ip`, `aav_country`
FROM aav_views
where aav_user_id=$USER_ID
ORDER BY date DESC
");

但它没有用。网络浏览器说
"页面无效 www.mysite.com目前无法处理此请求。 HTTP ERROR 500"
(不是500内部服务器错误)
我像这样添加sql查询的限制
$view->ach = $db->Query("SELECT from_unixtime(`date`), `aav_id`, `aav_domain`, `aav_word`, `aav_referer`, `aav_ip`, `aav_country`
FROM aav_views
where aav_user_id=$USER_ID
ORDER BY date DESC
LIMIT 1000
");

现在它工作正常。但我需要无限制地使用。我需要查询所有200k行
答案 0 :(得分:1)
从MySQL处理如此大的结果集的方法是使用名为 pagination 的东西。使用分页,您一次只能检索记录100或1000。这消除了使用过多信息导致Web服务器或网页崩溃的问题。
MySQL有两个非常适合处理此问题的关键字。您已经知道的第一个LIMIT
,它控制结果集中显示的总记录数。第二个是OFFSET
,它指定结果集中开始记录的位置。
举个例子,如果你想从表中返回第二个100条记录,你可以发出以下查询:
SELECT from_unixtime(date), aav_id, aav_domain, aav_word, aav_referer, aav_ip, aav_country
FROM aav_views
where aav_user_id=$USER_ID
ORDER BY date DESC
LIMIT 100 OFFSET 100
通常,用户通过在包含查询结果的UI中进行分页来控制偏移量。