Добрый вечер!
Есть 2 таблицы:
table_turn
(ID, id_user, status)
1, 2, 0;
2, 3, 0;
3, 1, 0;
4, 4, 0;
5, 5, 0;
6, 7, 0;
7, 9, 0;
8, 6, 0;
9, 8, 0;
10, 10, 0;
11, 11, 0;
table_users
(ID, FIO, ball)
1, Иванов, 0;
2, Петров, 0;
3, Сидоров, 0;
4, Семенов, 0;
и так далее
table_turn - это очередь. Задача: по крону запускать скрипт который подсчитывал каждого 5 пользователя и начислял по очереди по 1 баллу.
Например: в таблице (table_turn) ID 1, id_user Петров, status 0 - самый первый в списке, скрипт запустился и подсчитал, что под Петровым есть еще 5 пользователей (ID 2, 3, 4, 5, 6),
за это Петрову начислился 1 балл и статус у него поменялся на 1. Чтобы скрипт его больше не считал. Далее скрипт смотрит ID 2, id_user Сидоров, status 0 и высчитывет еще 5-х (ID 3, 4, 5, 6, 7),
если есть 5 пользователей то Сидорову начисляется 1 балл и статус меняется на 1... С каждым запуском скрипт подсчитывает пользователей в порядке очереди с ID 1 со статусом 0...
Если у последнего пользователя не хватает пользователей (например 3 человка) то скрипт просто отключается до следующего запуска по расписанию.
Я не могу понять, как сделать именно так, чтобы скрипт обрабатывал каждую строку и проверял наличие под ней 5 пользователей...
Подскажите как такое сделать?
1. ЮричЪ - 05 Мая, 2015 - 01:09:49 - перейти к сообщению
2. Panoptik - 05 Мая, 2015 - 12:04:17 - перейти к сообщению
самое тупое решение в лоб
доставать по очереди каждую запись со статусом 0
доставать по очереди каждую запись со статусом 0
CODE (SQL):
скопировать код в буфер обмена
скопировать код в буфер обмена
- SELECT * FROM table_turn WHERE STATUS = 0 ORDER BY id ASC LIMIT 1;
для каждого выполнять примерно такой запрос
CODE (SQL):
скопировать код в буфер обмена
скопировать код в буфер обмена
- SELECT COUNT(*) FROM table_turn WHERE STATUS = 0 AND id > {id предыдущей записи}
собственно если каунт будет больше или равно 5 то это повод добавить баллы пользователю из первого запроса
можно попробовать одним запросом, но не уверен что получится правильно или вообще может положить базу
CODE (SQL):
скопировать код в буфер обмена
скопировать код в буфер обмена
- SELECT t1.* , count(t1.id)
- FROM table_turn t1
- LEFT JOIN talbe_turn t2
- ON t2.id > t1.id AND t2.STATUS = 0
- WHERE t1.STATUS = 0
- GROUP BY t1.id
- ORDER BY t1.id ASC