Я выбираю данные из базы данных mySQL с помощью 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"
}
}
Но когда в моей базе данных содержится более 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
просто не отображается.И идентификатор теперь не является ключом массива.
Есть ли способ получить тот же результат, чем при fetchAll
, используя fetch
, или есть способ не перегружать систему при помощи fetchAll
а много записей?