2014-11-13 3 views
3

У меня есть php-скрипт, который выполняет запрос mysql. У меня есть интерфейс HTML/JQuery, который инициирует асинхронный вызов (AJAX) для сценария, запрашивающего его, например. удалите некоторые данные. Я знаю, что мой пул данных очень мал, но если он стал больше, я хотел бы показать, сколько строк было обработано (потому что пока невозможно определить расчетное время, поскольку оно неизвестно до завершения запроса).Информация о ходе выполнения запроса MySQL

Этот вопрос скорее теоретический, чем практический. Есть ли способ узнать, сколько строк было обработано, пока запрос якобы все еще запущен?

Это может быть оператор delete или select.

Мой основной вопрос: Возможно ли, чтобы один php-скрипт выполнял длинный запрос, а другой возвращал статус-кво, пока он все еще работает, когда он вызывается? (например, как-то извлекать затронутые строки для конкретного запроса или что-то еще?)

Для простоты предположим, что у меня есть 2 php-файла, которые я могу вызвать непосредственно из своего браузера - один выполняет запрос, а другой, предположительно, получает его статус. Возможно ли, и если бы кто-то мог указать мне в правильном направлении? Возможно, мне придется использовать какие-то хранимые процедуры, которые, по крайней мере, сообщали бы количество строк, которые были обработаны?

+0

Если вы удаляете строки, которые вы могли бы получить начальный счет, а затем использовать [ 'row_count()'] (http://dev.mysql.com/doc/refman /5.5/en//information-functions.html#function_row-count), чтобы сравнить то, что у вас есть «сейчас», и то, что у вас было раньше. На это может повлиять блокировка строк или таблиц. –

+0

Вам нужно будет создать скрипт, который вы ищете в JQuery; в рамках шагов, которые вы выполните, и получите статус выполнения запроса. – unixmiah

+0

Ну JQuery не выполняет сам mysql-statement ... первый скрипт php запускает запрос, второй проверяет состояние. Да, для удаления строк я мог бы сделать то, что предложил Джей Бланшар.Но есть ли что-то подобное для SELECT-утверждения? affected_rows? или что-то типа того? – Igor

ответ

1

Этот вопрос скорее теоретический, чем практический. Есть ли способ узнать, сколько строк было обработано, пока запрос якобы все еще запущен?

Не является родным, но вы можете работать.

Возможно ли, чтобы один php-скрипт выполнял длинный запрос, а другой возвращал статус-кво, пока он все еще работает, когда он вызывается? (например, каким-то образом извлекать затронутые строки для конкретного запроса или что-то еще?)

Эти два сценария должны совместно использовать общее место хранения, чтобы «обмениваться данными», и вы можете использовать Redis для этой цели.

Сценарий, выполняющий запрос, также обновляет значение из Redis, а другой скрипт считывает данные из Redis и возвращает их в браузер.

Альтернативой будет выполнение запросов партиями (из 10, 20 и т. Д.), и вы можете считать обработанные запросы на стороне клиента. Теоретически, если скрипт запроса не возвращает ошибку, это означает, что все запросы выполнены успешно, и вы можете увеличить значение счета. Вы повторяете процесс до тех пор, пока скрипт запроса не вернет значение 0 выполненных запросов, а это значит, что вы закончили.

Для получения дополнительной информации см this answer on SO и http://redis.io/

+0

Не могли бы вы немного рассказать о Редисе или указать мне ссылку? Ваше другое предложение звучит как что-то, что я сделал бы, если бы не было другого пути. Я просто надеялся, что есть способ получить некоторую информацию о (уже) затронутых строках, пока оператор все еще выполняется. – Igor

+0

Я добавил 2 ссылки, где вы можете получить дополнительную информацию. Redis был всего лишь примером, но вы можете использовать любую систему хранения ключей. –

Смежные вопросы