необходимо каким то образом обнулять базу, так как поля со временем будут расти. Вот собственно и весь вопрос. Простым удалением данных раз в месяц тут воспользоваться нельзя, так как эти данные в будущем потребуются. Буду рад каждому ответу и предложению.
Спустя 23 минуты, 39 секунд (18.03.2010 - 18:43) glock18 написал(а):
Ну если данных настолько много, что нужно их чистить, то можно за каждый месяц делать бэкап.
Для этого нужен примерно один скрипт и примерно одна строка в кроне. Скрипт должен вызывать примерно mysqldump, а затем truncate'ить таблицы (опасно тем, что данные по id станут неактуальны, если рассматривать в срезе сразу несколько таких дампов) или delete'ить (оставить id актуальными, хотя для удаления всей таблицы целиком не рекомендуется - лучше все таки использовать его). скрипт должен запускаться кроном раз в месяц в фиксированное время.
Для того чтобы к данным иметь доступ в любой момент, можно полученный из mysqldump файл сразу прогонять утилиту mysql с командой source и кидать результат в отдельную базу данных. как известно можно при одном подключении к серверу баз данных использовать сразу несколько.
PS: опять же, мне думается, что данных на самом деле не так много, чтобы чистка таблиц был актуальной.
PPS: устное предупреждение за не имеющее смысла название темы. первый пост не стал марать, в следующий раз давайте осмысленные названия темам.
Для этого нужен примерно один скрипт и примерно одна строка в кроне. Скрипт должен вызывать примерно mysqldump, а затем truncate'ить таблицы (опасно тем, что данные по id станут неактуальны, если рассматривать в срезе сразу несколько таких дампов) или delete'ить (оставить id актуальными, хотя для удаления всей таблицы целиком не рекомендуется - лучше все таки использовать его). скрипт должен запускаться кроном раз в месяц в фиксированное время.
Для того чтобы к данным иметь доступ в любой момент, можно полученный из mysqldump файл сразу прогонять утилиту mysql с командой source и кидать результат в отдельную базу данных. как известно можно при одном подключении к серверу баз данных использовать сразу несколько.
PS: опять же, мне думается, что данных на самом деле не так много, чтобы чистка таблиц был актуальной.
PPS: устное предупреждение за не имеющее смысла название темы. первый пост не стал марать, в следующий раз давайте осмысленные названия темам.
Спустя 31 минута, 12 секунд (18.03.2010 - 19:14) SipFer написал(а):
вы немного меня не поняли..тут дело вот в чем. каждый месяц, к определенному врачу будут приходить новые пациенты. их нужно учитывать, занося в бд. соответственно они войдут в отчёт ЗА МЕСЯЦ(вернее их количество)!в следующем же месяце нужно будет в репорте выводить данные о количестве уже за текущий месяц. Так, если ложить все данные в базу, количество пациентов будет наращиваться..вот я и размышляю над тем, каким образом в отчет включать данные за каждый месяц, ну то есть в январе - столько то, в феврале - столько то, в марте - столько то...
Спустя 1 час, 26 минут (18.03.2010 - 20:40) glock18 написал(а):
построение такого отчета - один небольшой запрос. опять же думаю, что я все понял верно. сколько пациентов будет в больнице через месяц, а через 2 года? сомневаюсь, что оно много превысит количество проживающих в ее районе. это сколько?
думаю, что немного. тем более если хранить данные о каждом пациенте и держать их в одной базе, то это упростить работу с ними через эту самую базу.
если еще не убедил, то читайте выше, в первом своем посте я описал.
думаю, что немного. тем более если хранить данные о каждом пациенте и держать их в одной базе, то это упростить работу с ними через эту самую базу.
если еще не убедил, то читайте выше, в первом своем посте я описал.
Спустя 2 минуты, 16 секунд (18.03.2010 - 20:42) sergeiss написал(а):
Ну хорошо... Скорее всего, у тебя есть информация о каждом посещении врача каждым пациентом. Верно? Если есть, то тогда там должна быть информация о дате посещения.
Далее просто находишь уникальных пациентов, обратившихся к конкретному врачу в течение определенного периода времени - и получаешь искомую цифру. Делается это всё одним запросом.
Указываешь период времени с первого до последнего числа месяца - получаешь данные за месяц. Указал неделю - получил за неделю. И так за любой интервал времени.
Далее просто находишь уникальных пациентов, обратившихся к конкретному врачу в течение определенного периода времени - и получаешь искомую цифру. Делается это всё одним запросом.
Указываешь период времени с первого до последнего числа месяца - получаешь данные за месяц. Указал неделю - получил за неделю. И так за любой интервал времени.
Спустя 29 минут, 11 секунд (18.03.2010 - 21:11) AntonNABSAL написал(а):
Есть вариант сделать таблицу действия - например приход пациента - это тоже действие у которого есть дата, имя пациента и обслуживающего врача и т.д. и тоже заносить эти данные.
Спустя 15 минут, 34 секунды (18.03.2010 - 21:27) SipFer написал(а):
sergeiss. очень понравилась ваша логика. не мог бы привести пример такого запроса?..
Спустя 1 час, 7 минут, 56 секунд (18.03.2010 - 22:35) sergeiss написал(а):
Допустим, у тебя есть таблица, показывающая, кто, когда и к кому приходил. Там могут быть и другие поля, но они в данном случае не важны. Нужны только эти 3 поля.
Таблица patients
---
id_patient
date_view
id_doctor
what_happened
---
Считаем количество уникальных пациентов, которые приходили к определенному доктору за указанный интервал времени.
В Постгре будет такой запрос
В MySQL, возможно, и по-другому его надо написать. Все данные можно заменить на переменные и настраивать запрос очень оперативно.
Если нужно получить данные сразу же по всем докторам, то тогда так:
Имена докторов можно "подтягивать" из другой таблицы, где будет сделано четкое соответствие между их АйДи и именем, фамилией и другими данными.
Таблица patients
---
id_patient
date_view
id_doctor
what_happened
---
Считаем количество уникальных пациентов, которые приходили к определенному доктору за указанный интервал времени.
SELECT count( distinct id_patient)
FROM patients
WHERE id_doctor=5 and date_view between '2010-02-01' and '2010-02-28'
В Постгре будет такой запрос

Если нужно получить данные сразу же по всем докторам, то тогда так:
SELECT id_doctor, count( distinct id_patient)
FROM patients
WHERE date_view between '2010-02-01' and '2010-02-28'
GROUP BY id_doctor
Имена докторов можно "подтягивать" из другой таблицы, где будет сделано четкое соответствие между их АйДи и именем, фамилией и другими данными.
Спустя 5 минут, 13 секунд (18.03.2010 - 22:40) SipFer написал(а):
Большое спасибо, sergeiss. Крайне признателен