Как перебрать таблицу в базе данных?
Имею базу данных mysql, и таблицу с большим количеством записей. Решил перебирать частями. Написал такой код:
async* _getEntities() {
let offset = 0, total;
const limit = 100;
do {
const result = //Запрос к базе данных. Limit и offset тоже тут указаны.
//Рассчитываем смещение.
offset = result.offset + limit;
total = result.total;
yield result.data;
} while (offset < total);
}
И контроллер для этого такой:
async controller() {
for await (const item of this._getEntities()) {
if (тут условие) {
//Запрос в базу данных, на удаление элемента. ТУТ И ЕСТЬ ПРОБЛЕМА.
}
}
}
Суть проблемы: если я удалю элемент, количество всех записей ("total") изменится, a смещение (offset) это не учитывает, что приведет к пропускам.
Как корректно перебрать? Все, что пришло в голову - собрать массив с id и потом удалять.
Ответы (1 шт):
Автор решения: nörbörnën
→ Ссылка
while (1) {
...
if (!result.rows || result.rows.length < limit) {
break;
}
}
Но, вообще, нет смысла городить эту городушку так как в sql есть команда DELETE FROM TABLENAME WHERE ...YOUR_CONDITIONS...;