0
我必须获取一个包含两列数千万记录的表格 - id
和name
,对于每个名称进行爆炸操作,然后将每个爆炸元素与其ID一起保存到文件中。 id-keyword
对必须是唯一的。将mysql表转换为数组
什么是最快,最有记忆效率的方法呢?
我一直在思考这样的事情:
$query = $pdo -> prepare('SELECT id, name FROM table');
$query -> execute();
$time = microtime(true);
if (file_exists('test.txt')) {
unlink('test.txt');
}
$fh = fopen('test.txt', 'a');
while ($result = $query -> fetch()) {
$tokens = explode(" ", $result['name']);
foreach ($tokens as $token) {
fwrite($fh, $result['id'] . ' ' . $token . PHP_EOL);
}
}
fclose($fh);
echo microtime(true) - $time;
- 但它需要在15秒内实现这一目标,这是方法来长,和数组是不是唯一的。
- 我还可以创建一个字作为密钥的数组,其中包含ID作为键,这将解决uniqness问题的数组,但整体结构肯定会过大,以适应到内存,并在合理的时间。
- 我可以创建数组达到几条记录并不时地执行
fwrite
,但是再次,这些行不会是唯一的。
我不想在数据库层上这样做 - 数据库逻辑越少越好,而且我也不想执行更重的数据库操作。
我该怎么办?
你为什么要炸开空间的名字?这就是你在文件中引入重复行的方式。请注意,在内部循环中甚至没有使用'$ token'变量。你想要做什么? – jeroen
对不起,我犯了一个错字,我编辑了代码。我试图从列名中获取包含所有单个单词的数组以及相应的名称ID,而不重复。 – user99999
我还是不明白你在做什么;你可以很容易地过滤'$ tokens',这样所有的id-word组合都将是唯一的(假设id是唯一的,以......开始),并且你可以跟踪哪些记录已经被处理,这样你只需要做它曾经。 – jeroen