【发布时间】:2018-10-24 07:37:10
【问题描述】:
我正在使用 fetchAll 从 mySQL 数据库中选择数据:
$sql = "SELECT id, dateTime, fileName, path, size FROM files WHERE project = ?";
$q = $pdo->prepare($sql);
$q->execute([$id]);
$result = $q->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_UNIQUE | PDO::FETCH_ASSOC);
数组如下所示:
array(2) {
["10002E41F35560F492298F50D14B03A1"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 19:46:25"
["fileName"]=>
string(10) "monkey.jpg"
["path"]=>
string(59) "Volumes/KFS18050001/18050001/elephant/cat/monkey/monkey.jpg"
["size"]=>
string(7) "8650752"
}
["10008A76CEE6BEEEB8000891094A2931"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(9) "horse.jpg"
["path"]=>
string(51) "Volumes/KFS18050001/18050001/elephant/cat/horse.jpg"
["size"]=>
string(7) "8306688"
}
}
但是当我的数据库中有超过 500.000 个条目时,这对系统来说太多了。未创建数组。它加载很长时间,然后我得到一个空白页。我尝试使用fetch 而不是fetchAll:
$sql = "SELECT id, dateTime, fileName, path, size FROM files WHERE project = ?";
$q = $pdo->prepare($sql);
$q->execute([$id]);
$result = $q->fetch(PDO::FETCH_GROUP | PDO::FETCH_UNIQUE | PDO::FETCH_ASSOC);
使用fetch,我的系统可以处理 500.000 个条目。但现在我没有得到我需要的结果:
array(6) {
["id"]=>
string(32) "10002E41F35560F492298F50D14B03A1"
["dateTime"]=>
string(19) "2016-10-12 19:46:25"
["fileName"]=>
string(10) "monkey.jpg"
["path"]=>
string(59) "Volumes/KFS18050001/18050001/elephant/cat/monkey/monkey.jpg"
["size"]=>
string(7) "8650752"
}
horse.jpg 只是不显示。而且 id 现在不是数组的键了。
有没有办法通过只使用fetch 来检索与fetchAll 相同的结果,或者有没有办法不让fetchAll 和大量条目使系统不堪重负?
【问题讨论】:
-
fetch 一次检索一行,因此您必须循环才能获得多个条目。但最终,如果你有 500,000 个合法结果,那么你就有 500,000 个结果。您需要显示所有这些吗?也许你可以做一些分页?也许 UI 需要重新设计以仅显示更具体的数据(例如,您需要更多搜索过滤器或其他东西)?没有任何上下文很难知道。
-
是 500 000 还是 500?
-
@TrevorClarke 500000
-
@ADyson 我需要一个包含所有这些的数组。因为我需要将这个数组与另一个数组进行比较。我不知道数组块是否有助于解决这个问题
-
@Jarla 您可以使用
->rowCount计算行数并从中减去 x :)
标签: php mysql arrays pdo fetch