我正在使用一个非常大的数据库,但我还不太习惯。我需要循环浏览 1,400 个结果(定期添加更多结果)并根据每个结果运行函数(如果满足条件)。
这是我的代码的骨架:
$blogs = $wpdb->get_results(
"SELECT blog_id,path FROM {$wpdb->blogs}
WHERE blog_id != {$wpdb->blogid}
AND site_id = '{$wpdb->siteid}'
AND spam = '0'
AND deleted = '0'
AND archived = '0'
order by blog_id", ARRAY_A
);
然后我对它们运行一个 foreach 以获取一些数据(特别是博客名称)
foreach( $blogs as $blog ) :
switch_to_blog( $blog[ 'blog_id' ] );
if(strpos(strtolower($blog_details->blogname), strtolower($_GET['squery'])) !== false){
//Show the site's title and link to the site
}
结束;
基本上,在第一部分中,我获取了所有 1400 个结果,这并没有多大作用,请给我所有活动博客的 ID(这就是该数据库表中的所有内容)。
在第二部分中,我运行一个 wordpress 函数来获取博客的名称并将其显示在列表中,前提是用户查询在博客的名称中。(我逃避输入,不用担心)。
有人说要使用类似的东西:
...
AND archived = '0'
LIMIT {$offset},20
order by blog_id", ARRAY_A
...
这可能有效,但它只返回 20 个结果。如果我需要 end 函数在结果 #17 和 #1,111 上运行,只有 #17 会出现?
所以我的最终问题是:
有没有办法让“20 ~limit”部分循环浏览所有数据库条目?没有限制的内存使用量约为 200MB。如果我可以一次将其限制为 20 个,但会自动循环遍历它们,它(应该??)会大大减少我的内存使用量,对吗?
现在的最终结果是:
- 得到 1400 个结果,运行函数,在列表中显示 X 博客名称。
我想要的是(除非 PHP-MySQL 有更好的方法来减少内存开销)是:
- 得到 20 个结果,运行函数,在列表中显示 X 个博客名称。得到 20
- 更多结果 (21-40),运行函数,在列表中显示 X 博客名称。
- 再获得 20 个结果 (41-60),运行函数,在 a 中显示 X 博客名称
- 列表。ETC...
所有这些都不需要用户的更多输入。只是让它们自动循环。