historia zmian danych abonenta, itp
Hej,
Mam okazję pracować na aplikacji, która obejmuje każdy dział sporej firmy. Ostatnio przyglądałem się jak od strony bazy danych wygląda zapis danych kontrahenta, opis posesji i innych.
Każda ważniejsza tabela w bazie danych oprócz kolumny ID, ma jeszcze kolumnę POPRAWKA. Obie te kolumny tworzą unikalny klucz danego rekordu. Podczas zmiany danych rekordu, rekord nie jest zmieniany, tylko dodawany jest nowy rekord oraz inkrementowana jest wartość w kolumnie POPRAWKA. Taki zabieg pozwala trzymać historię zmiany danych. np abonenta. Może warto byłoby pomyśleć o czymś takim w LMS. Pewnie sporo funkcji wymagałoby przepisania, ale patrząc pod kątem ochrony danych osobowych, można by w dosyć prosty sposób trzymać dane historyczne, kto dokonywał zmian i co najważniejsze kiedy.
Witam, pomysł dobry trzeba by jeszcze tylko dodać id_edytora i czas_edycji.
Pozdrawiam Miłosz
2011/11/10 "D.Wesołowski" wesoly@klu.pl
Hej,
Mam okazję pracować na aplikacji, która obejmuje każdy dział sporej firmy. Ostatnio przyglądałem się jak od strony bazy danych wygląda zapis danych kontrahenta, opis posesji i innych.
Każda ważniejsza tabela w bazie danych oprócz kolumny ID, ma jeszcze kolumnę POPRAWKA. Obie te kolumny tworzą unikalny klucz danego rekordu. Podczas zmiany danych rekordu, rekord nie jest zmieniany, tylko dodawany jest nowy rekord oraz inkrementowana jest wartość w kolumnie POPRAWKA. Taki zabieg pozwala trzymać historię zmiany danych. np abonenta. Może warto byłoby pomyśleć o czymś takim w LMS. Pewnie sporo funkcji wymagałoby przepisania, ale patrząc pod kątem ochrony danych osobowych, można by w dosyć prosty sposób trzymać dane historyczne, kto dokonywał zmian i co najważniejsze kiedy.
-- D.Wesołowski ______________________________**_________________ lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/**mailman/listinfo/lmshttp://lists.lms.org.pl/mailman/listinfo/lms
Ja kiedys daaaaawno temu do tego zrobilem sobie trigger i dziala do dzis.
CREATE DEFINER=`root`@`xx.xx.xx.xx` TRIGGER nodes_logi_update BEFORE UPDATE ON nodes FOR EACH ROW BEGIN IF new.name!=old.name OR new.mac!=old.mac OR new.ipaddr!=old.ipaddr OR new.ownerid!=old.ownerid OR new.warning!=old.warning then INSERT INTO nodes_logi SELECT * FROM nodes WHERE id=old.id;END IF;END
----- Oryginalna wiadomość -----
Od: "milek" milekz@gmail.com Do: "lista użytkowników LMS" lms@lists.lms.org.pl Wysłane: czwartek, 10 listopad 2011 9:25:53 Temat: Re: [lms] historia zmian danych abonenta, itp
Witam, pomysł dobry trzeba by jeszcze tylko dodać id_edytora i czas_edycji.
Pozdrawiam Miłosz
2011/11/10 "D.Wesołowski" < wesoly@klu.pl >
Hej,
Mam okazję pracować na aplikacji, która obejmuje każdy dział sporej firmy. Ostatnio przyglądałem się jak od strony bazy danych wygląda zapis danych kontrahenta, opis posesji i innych.
Każda ważniejsza tabela w bazie danych oprócz kolumny ID, ma jeszcze kolumnę POPRAWKA. Obie te kolumny tworzą unikalny klucz danego rekordu. Podczas zmiany danych rekordu, rekord nie jest zmieniany, tylko dodawany jest nowy rekord oraz inkrementowana jest wartość w kolumnie POPRAWKA. Taki zabieg pozwala trzymać historię zmiany danych. np abonenta. Może warto byłoby pomyśleć o czymś takim w LMS. Pewnie sporo funkcji wymagałoby przepisania, ale patrząc pod kątem ochrony danych osobowych, można by w dosyć prosty sposób trzymać dane historyczne, kto dokonywał zmian i co najważniejsze kiedy.
witam wszystkich czy jest jakas nakladka na pingera zeby pokazywal klientow online za radiusem na pppeo?
Witam,
Napisałem sobie dwa zapytania na potrzeby raportu który chcę zrobić, nie wiem tylko jak na poziomie sql połączyć te zapytania aby wynik pojawiał się w momencie gdy customer.id jest wynikiem RÓWNOCZEŚNIE obydwu zapytań. Zapytanie ma wyświetlić wszystkich podłączonych klientów którzy mają: - zobowiązanie miesięczne na kwotę >= 4zł oraz - zobowiązania kwartalne, roczne na kwotę od 1zł do 4zł
SELECT customers.id, customers.lastname, customers.name, customers.address, customers.city, customers.zip, tariffs.value, tariffs.period, assignments.dateto, assignments.at FROM customers LEFT JOIN assignments ON customers.id = customerid LEFT JOIN tariffs ON assignments.tariffid = tariffs.id WHERE deleted = 0 AND (customers.status = 3) AND (assignments.invoice = 1) AND (assignments.dateto >= (select now()::abstime::int4) OR assignments.dateto = 0) AND (assignments.at != 1) AND (tariffs.value BETWEEN 1 AND 4) GROUP BY customers.id, customers.lastname, customers.name, customers.address, customers.city, customers.zip, tariffs.value, tariffs.period, assignments.dateto, assignments.at;
SELECT customers.id, customers.lastname, customers.name, customers.address, customers.city, customers.zip, tariffs.value, tariffs.period, assignments.dateto, assignments.at FROM customers LEFT JOIN assignments ON customers.id = customerid LEFT JOIN tariffs ON assignments.tariffid = tariffs.id WHERE deleted = 0 AND (customers.status = 3) AND (assignments.invoice = 1) AND (assignments.dateto >= (select now()::abstime::int4) OR assignments.dateto = 0) AND (assignments.at = 1) AND (tariffs.value >= 4) GROUP BY customers.id, customers.lastname, customers.name, customers.address, customers.city, customers.zip, tariffs.value, tariffs.period, assignments.dateto, assignments.at;
Będę wdzięczny za pomoc.
W dniu 11-11-10 12:50, Paweł Mendela pisze:
Witam,
Napisałem sobie dwa zapytania na potrzeby raportu który chcę zrobić, nie wiem tylko jak na poziomie sql połączyć te zapytania aby wynik pojawiał się w momencie gdy customer.id jest wynikiem RÓWNOCZEŚNIE obydwu zapytań.
Sposób mało wydajny i brzydki ale skuteczny:
- podzapytania:
SELECT customers.id, customers.lastname, customers.name, customers.address, customers.city, customers.zip, tariffs.value, tariffs.period, assignments.dateto, assignments.at FROM customers LEFT JOIN assignments ON customers.id = customerid LEFT JOIN tariffs ON assignments.tariffid = tariffs.id WHERE customers.id IN (SELECT customers.id FROM customers LEFT JOIN assignments ON customers.id = customerid LEFT JOIN tariffs ON assignments.tariffid = tariffs.id WHERE deleted = 0 AND (customers.status = 3) AND (assignments.invoice = 1) AND (assignments.dateto >= (select now()::abstime::int4) OR assignments.dateto = 0) AND (assignments.at != 1) AND (tariffs.value BETWEEN 1 AND 4) GROUP BY customers.id) AND customers.id IN (SELECT customers.id FROM customers LEFT JOIN assignments ON customers.id = customerid LEFT JOIN tariffs ON assignments.tariffid = tariffs.id WHERE deleted = 0 AND (customers.status = 3) AND (assignments.invoice = 1) AND (assignments.dateto >= (select now()::abstime::int4) OR assignments.dateto = 0) AND (assignments.at = 1) AND (tariffs.value >= 4) GROUP BY customers.id);
- pokręcone warunki:
SELECT customers.id, customers.lastname, customers.name, customers.address, customers.city, customers.zip, tariffs.value, tariffs.period, assignments.dateto, assignments.at FROM customers LEFT JOIN assignments ON customers.id = customerid LEFT JOIN tariffs ON assignments.tariffid = tariffs.id WHERE ( deleted = 0 AND (customers.status = 3) AND (assignments.invoice = 1) AND (assignments.dateto >= (select now()::abstime::int4) OR assignments.dateto = 0) ) AND ( ((assignments.at != 1) AND (tariffs.value BETWEEN 1 AND 4)) AND ((assignments.at = 1) AND (tariffs.value >= 4)) ) GROUP BY customers.id, customers.lastname, customers.name, customers.address, customers.city, customers.zip, tariffs.value, tariffs.period, assignments.dateto, assignments.at;
Zrobione na szybcika "na kolanie", nie ma pod ręką odpowiedniej bazy aby to debugować, możliwe sa tez błędy składni i nawiasów.
Będę wdzięczny za pomoc.
piwo starczy, jak zadziała ;)
uczestnicy (6)
-
"D.Wesołowski"
-
Jaroslaw Czarniak
-
JOYNET
-
milek
-
Paweł Mendela
-
Waldemar Dymkiewicz