我正在使用 fetchAll
:
$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"
}
}
但是当我的数据库中有超过500000个条目时,这对系统来说就太多了。未创建数组。它是加载很长,然后我得到一个空白页。我试着用 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
,我的系统可以处理500000个条目。但现在我没有得到我想要的结果:
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现在不是数组的键。
有没有什么方法可以检索相同的结果呢 `fetchAll` 使用just `fetch` 或者有没有一种方法可以让系统不被 `fetchAll` 还有很多条目?
1条答案
按热度按时间elcex8rz1#
因为我非常怀疑你是否需要一次加载500000张图片,我建议你尝试下面的方法。
我要做的是继续使用fetchall(),但只从当前需要的数据库中选择结果。如果你需要加载所有的图片,假设你正在创建一个instagram类型的程序,我建议你动态加载图片,当你向下滚动页面时,每隔几百张图片查询一次数据库。
你可以这样做
limit
在mysql中:一旦您的用户向下滚动了80张图片,请使用以下命令再次查询数据库:
这样,您就不会用太多的结果来重载数据库或客户机系统。