Форум: "Базы";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизReal time изменение записей! Найти похожие ветки
← →
Pashkerton (2004-09-22 10:41) [0]Доброе Утро!
На MSSQL2000 Servere БД. В ней 2 таблицы. Записи на Servere обновляются и дополняются
каждые 2 минуты.
Таблица 1: records
| cardcode | time | date | action |
Таблица 2: personal
| cardcode | fio |
Значение поля action из таблицы 1 означает "1"-человек пришел, "0"-человек ушел.
Нужно на удалённой машине в realtime(возможно по таймеру) выводить fio всех кто на
данный момент пришел.
SELECT MAX(time) FROM records WHERE cardcode = "..." (одному из номеров из таблицы 2)
итак по всем номерам? Создавать на клиенте временную таблицу?
Есть какие нибудь решения такой задачи?
← →
Суслик © (2004-09-22 10:52) [1]1) real time это такое модное слово или оно имеет определенный смысл?
2) объяснил бы что значит time и date
3) где врем ухода?
4) если считается, что люди не уходят то запрос типа такогоselect t2.fio
from table1 t1
inner join table2 t2 on t2.cardcode = t1.cardcode
where t1.time <= currecnt_timestamp
← →
Miralex © (2004-09-22 10:53) [2]
> Pashkerton
По таймеру и делай выборки с таблицы.
(если есть проблемы с SQL языком - почитай статьи на citforum.ru)
← →
Pashkerton (2004-09-22 10:58) [3]Исправляюсь.
1) Если кто пришел, то он сразу должен отобразиться на клиенте
2) time - время события, date - дата события
пример 123|11:00:00|2004/09/22|1| человек пришел в 11:00
123|12:00:00|2004/09/22|0| человек ушел в 12:00
3) За уход/приход отвечает поле action
← →
Суслик © (2004-09-22 11:03) [4]
> [3] Pashkerton (22.09.04 10:58)
> 3) За уход/приход отвечает поле action
да понял я уже - сначала невнимательно прочел вопрос.
на фига тебе два поля time и date?
есть же тип в mssql server datatime и smalldatetime?
> 1) Если кто пришел, то он сразу должен отобразиться на клиенте
так не выйдет - нужно переодически опрашивать.
Вернее теоретически можно, но сложно.
ЗЫ. ЗАпрос сейчас напишу.
← →
КаПиБаРа © (2004-09-22 11:16) [5]Нужен "сервер оповещений", который при добавлении записи в базу будет рассылать клиентам сообщения что произошли изменения.
============================================
Сексом надо заниматься только в одном
единственном случае - когда он пpедставится.
============================================
← →
Суслик © (2004-09-22 11:24) [6]
> ЗЫ. ЗАпрос сейчас напишу.
Пообещал, а написать не могу, т.к. нужно подумать, а времени нет. Прости :)
← →
Pashkerton (2004-09-22 11:33) [7]Решение нашел!
завести таблицу со всеми карточками и где есть поле состояние (State).
при добавлении в журнал прихода/ухода обновлять это поле = action.
тогда запрос будет выглядеть как select * from Table2 where State = 1
А можно где нибудь хранить временной штамп, и если он изменился - значит были внесены изменения то делать выборку.
← →
Sandman25 © (2004-09-22 11:37) [8][7] Pashkerton (22.09.04 11:33)
Лучше добавить поле - время последнего изменения.
И еще по триггеру писать в новую таблицу из одного поля и одной записи - время последнего изменения по всей таблице. Тогда сначала извлекается это значение, и если оказывается, что данные изменились, происходит выполнение select ... where datetime_change > :last_client_update для поиска измененный данных.
← →
Johnmen © (2004-09-22 12:58) [9]Примерно так
SELECT DISTINCT A.cardcode, B.fio FROM Таблица1 A
JOIN Таблица2 B ON B.cardcode=A.cardcode
WHERE (A.action=1) AND
(A.datetime<=[интересующее датавремя]) AND
(([интересующее датавремя]-A.datetime)=
(SELECT MIN([интересующее датавремя]-A.datetime) FROM Таблица1 C
WHERE (C.cardcode=A.cardcode) AND (A.action=1))) AND
(NOT EXISTS (SELECT 0 FROM Таблица1 D
WHERE (D.cardcode=A.cardcode) AND
(D.action=0) AND
(D.datetime<=[интересующее датавремя]) AND
(D.datetime>=A.datetime)))
Если настаиваешь на раздельном хранении даты и времени, то сам модифицируешь. Я бы не стал настаивать...:)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c