如何通过PHP从MySQL数据库导出20 000个联系人以导入到桌面地址簿中?

时间:2009-10-21 13:44:57

标签: php mysql file ms-office export

我需要为导出联系人数据编写一个脚本,以便在贴纸上打印进行邮寄。数据库表中最多可能有 20 000 条记录。

主要问题是记录数量可能很高,并且站点托管在共享服务器上,导出整个20k记录可能会导致脚本或停顿。 我的数字不是很高,我只是将所有数据导出到hCard文件中。

解决方案需要使用PHP,并且MS Office必须可以使用生成的文件来打印地址标签。

欢迎所有想法

5 个答案:

答案 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)

分批工作......

  1. 将50个地址加载到$ i.csv。
  2. 重新加载您的网站(提示:标题()),重复约400次。
  3. 将400 cvs文件复制到一个大文件中(即使使用记事本)。
  4. 打开例如用Excel。

答案 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;