Как проверить существующие записи перед запуском кода обновления?

0

В настоящее время у нас есть PHP-код, который позволяет конечным пользователям обновлять записи в нашей базе данных, заполняя несколько полей формы. В базе данных есть поле, называемое sequentialNumber, и пользователь может ввести начальный номер и конечный номер, а запрос обновления выполняется в фоновом режиме для всех записей с последовательным номером между начальным и конечным номерами. Это довольно быстрый запрос.

В последнее время мы сталкиваемся с некоторыми проблемами, когда люди пытаются обновить записи, которые не существуют. Теперь это не проблема в конце базы данных, но они хотят получать уведомления, если записи не существуют, и если да, то какие из них не существуют.

Единственный способ, которым я могу это сделать, - запустить запрос select в цикле:

for ($i=$startNum; $i<=$endNum; $i++)  {

 //run select query: select sequentialNumber from myTable where sequentialNumber = $startNum;

}

Проблема в том, что наш общий хост имеет ограничение на тайм-аут для скриптов, и если пакет sequentialNumber достаточно велик, script отключится. Есть ли лучший способ проверить наличие записей перед запуском запроса на обновление?

EDIT: Мне просто пришло в голову, что я могу сделать еще один тест: получить количество записей, которые они пытаются обновить ($ endNum - $startNum), а затем выполнить запрос на подсчет:

select count(sequentialNumber) where sequentialNumber between $startNum and $endNum

Если результат запроса не совпадает с значением вычитания, то мы знаем, что всех записей нет. Он не сможет сказать нам, КОТОРЫЕ их нет, но, по крайней мере, мы знали бы, что что-то не так, как ожидалось. Действительно ли это способ сделать что-то?

  • 0
    В основном то же самое; mySQL позволяет вам использовать Between в качестве оператора, поэтому мне не нужно делать больше одного числа и меньше другого.
Теги:

2 ответа

1
Лучший ответ

Вы можете попробовать

select sequentialNumber from myTable where sequentialNumber between $startNum and $endNum

Это вернет все известные номера в этом диапазоне. Затем вы можете использовать функцию array_search, чтобы узнать, известен ли определенный номер или нет. Это должно быть быстрее, чем выполнение большого количества запросов к db.

0
var count = mysql_fetch_array(mysql_query('SELECT count(*) FROM x WHERE id>startNum and id<endNum'));

var modified = mysql_affected_rows(mysql_query('UPDATE x SET col='value' WHERE id>startNum and id<endNum'));

if (count[0] > modified) {
    // panic now
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню