我需要为导出联系人数据编写一个脚本,以便在贴纸上打印进行邮寄。数据库表中最多可能有 20 000 条记录。
主要问题是记录数量可能很高,并且站点托管在共享服务器上,导出整个20k记录可能会导致脚本或停顿。 我的数字不是很高,我只是将所有数据导出到hCard文件中。
解决方案需要使用PHP,并且MS Office必须可以使用生成的文件来打印地址标签。
欢迎所有想法!
答案 0 :(得分:4)
我假设您可以访问MySQL服务器。为什么不直接连接MySQL,它可以为您节省大量时间。如果操作需要很长时间或者您预计会遇到性能问题,那么请在午夜进行计划。
你可以像这样直接导出到csv,
SELECT * INTO OUTFILE 'result.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM my_table;
通过mailmerge将它加载到Word中,然后你去!
答案 1 :(得分:2)
导出到CSV文件的速度应该非常快。如果您的共享主机资源不足以至于无法在几秒钟内处理20k记录,那么您就会遇到更大的问题。
答案 2 :(得分:1)
分批工作......
答案 3 :(得分:1)
这取决于主机,但通常可以使用set_time_limit来延长脚本执行时间。这与将数据转储到csv文件相结合是一种方式。正如longneck所说,20k记录应该比通常分配给脚本运行的30秒更快。
答案 4 :(得分:0)
代码示例:(我已经不得不这样做了)
$static_amount = 100; // 100 Entries to the same time
for($i = 0; $i < $mysql->count(); $i+$static_amount)
{
$toFile[$i] = $mysql->query('SELECT * FROM table WHERE id < $i AND id > $static_amount');
sleep(10); // very important!!!
}
OR
if($_COOKIE['amount'])
{
$_COOKIE['amount'] = 100;
}
$toFile = $mysql->query('SELECT * FROM table WHERE id > $_COOKIE['alreadyPerformed'] LIMIT $_COOKIE['amount']';
setCookie('amount') = 100;
setCookie('alreadyPerformed') = $_COOKIE['alreadyPerformed'] + 100;