我正在使用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现在不是数组的关键。
有没有办法通过fetchAll
只使用fetch
检索相同的结果,或者有没有办法不用fetchAll
和很多条目来压倒系统?< / p>
答案 0 :(得分:1)
由于我非常怀疑您需要一次加载500,000张图片,我建议您尝试以下操作。
我要做的是继续使用fetchall(),但只选择您当前需要的数据库中的结果。如果你需要加载所有图像,让我们说如果你要创建一个instagram类型的程序,我建议你动态加载图像,当你向下滚动页面时,每隔几百个图像查询数据库。
您可以使用mysql中的limit
执行此操作:
SELECT ....query here.... LIMIT 0,100
一旦您的用户向下滚动说80张图片,请再次使用以下内容查询数据库:
SELECT ....query here.... LIMIT 100,199
这样,您不会在数据库或客户端系统上重载太多结果。