Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Самозавершение
 
 автор: Dimrix   (27.04.2005 в 14:21)   письмо автору
 
 

Добрый день. Столкнулся с такой ситуацией. Происходит запись данных целочисленных данных одновременно в одну таблицу от разных клиентов. В один прекрасный момент запись завершается по принципу: суммарное число введенных значений равно "Х". Теперь мне нужно вывести на экран кто сколько "набил" даных в таблицу. Оставлять такой код в рhp ну никак не хочется. Как можно выйти из ситуации средставми СУБД, т.е. что бы серверу посылалось сообщение, а он сам начинал обработку данных. Вариант с програмой, которая с определённым интервалом обращается к БД и проверяет сумму и при нужном значении начинает её обрабатывать не устраивает - сервер может так и подзагнутся...

   
 
 автор: cheops   (27.04.2005 в 23:12)   письмо автору
 
   для: Dimrix   (27.04.2005 в 14:21)
 

Т.е. нужно подсчитать кто сколько забил значений и вернуть результат? Но ведь обращаться за результатом всё-равно придётся, это не критично?

PS Неплохо так же примерно увидить структуру таблицы в которую набиваются данные и чем записи различных клиентов отличаются друг от друга.

   
 
 автор: Dimrix   (29.04.2005 в 11:23)   письмо автору
 
   для: cheops   (27.04.2005 в 23:12)
 

Суть такова. Есть две таблицы: 1я информативная(содержит данные о второй таблице) и 2я пользовательская(содержит данные, вводимые юзерами через сайт). в т.1. есть поле Состояние_пользовательской_таблицы. Может принимать 3 значения:
"0" - 2я таблица ещё не запущена и идёт набор пользователей, которые будут иметь доступ к т.2
"1" - 1я таблица набрала пользователей, 2я таблица принимает данные от пользователей.
"2" - 2я таблица приняла все нужные значения и приём данных от пользователей закончен.
В самом пхп я пишу одно условие: если Состояние_пользовательской_таблицы=1 отобразить форму ввода данных. Закрывать через пхп (Состояние_пользовательской_таблицы=2) не хочу, так код общий, и соответственно полю Состояние_пользовательской_таблицы будет присваиваться значение 2 столько раз, сколько пользователей имеют доступ к таблице, что будет без толку грузить машину. Другой вариант - проверять не только на стадии отображения данных, но и на стадии ввода данных на то, что не закрыта ли уже таблица, тоже приведёт к большому числу ненужных запросов, что опять будет грузить сервак понапрасну. Вот и вопрос встал, как оптимально сделать такое...

   
 
 автор: cheops   (29.04.2005 в 12:41)   письмо автору
 
   для: Dimrix   (29.04.2005 в 11:23)
 

Ну скорее всего без дополнительных запросов здесь не обойтись. Т.е. после занесения информации пользователем следует проверить не превысило ли число пользователей опеределённый порог и если это так присвоить полю flag значение 1
UPDATE tbl SET flag = IF(COUNT(id_tbl)>20,1,0)

ну и так же по второму запросу IF(ex1,ex2,ex3) - если ex1 - true, функция возвращает ex2, если false - ex3. COUNT - подсчитывает число элементов в столбце.

Ну и проверять значение этого флага время от времени - тут ничего лучше не придумаешь, действительно следует делать так как вы пишите, событий-то нет, к сожалению :(((

   
 
 автор: Dimrix   (29.04.2005 в 14:07)   письмо автору
 
   для: cheops   (29.04.2005 в 12:41)
 

Я чуток с флагами не понял... можно по подробнее? ;-)

   
 
 автор: cheops   (29.04.2005 в 23:37)   письмо автору
 
   для: Dimrix   (29.04.2005 в 14:07)
 

Под флагом (flag) я как раз и подразумеваю переменную, которая у нас изменяется (с 0 на 1, а потом на 2).

   
 
 автор: Dimrix   (29.04.2005 в 16:09)   письмо автору
 
   для: cheops   (29.04.2005 в 12:41)
 

Кстати, упустил для Вас одно важное обстоятельство - технологию получения и обработки данных ( начал писать и в этот момент пришла в голову мысль - о ней ниже). Технология следующая. Пользователям предлагается зайти в группу А или группу В (для обоих груп есть количественное ограничение которое может быть разным (оно фиксируется в таблице)). После полной набивки обоих груп или по временому интервалу (на заход в группы есть определённое время - тоже поле в таблице), после этого набор в группы прекращается о чём сигнализирует изменённое поле со значением 1(описывал выше). После этого создаётся таблица с х-полями (х-не меняющееся число) и туда вносятся данные. С вводом этих данных, некоторые пользователи отсеиваются(технологию отсеивания рассказывать не буду - долго да и не важно). Так вот признаком завершения ввода данных в эту таблицу служит отсутствие пользователей в одной из групп или в обоих сразу.
А теперь о мысли, которая появилась. Мысль следующая: при изменении значения статуса набора с 0(идёт набор) на 1(идёт приём данных от пользователей в другую таблицу, кстати 2 - всё ввод завершён, выше я писал об этом) изменять ограничение количества групп до реального значения (т.е. если в группе А или В пользователей меньше допустимого, то сделать это значение равным набраному количеству пользователей в каждую из групп). После чего при убывание какого-нибудь пользователя входе ввода данных, уменьшать соответствующее значение на 1. Признаком окончания ввода данных будет данное поле со значением=0. Лишняя проверка, но пока что других вариантов не вижу. Если у Вас есть лучшее предложение буду рад выслушать.

   
 
 автор: korwin   (28.04.2005 в 02:19)   письмо автору
 
   для: Dimrix   (27.04.2005 в 14:21)
 

На сколько я знаю mySql не имеет обратной связи(вроде триггеров в oracle), поэтому водрузить задачу определения когда наконец число X , будет достигнуто и сказать об этом php(в общем случае apache) невозможно, но я могу быть неправ.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования