Autor Zpráva
jago
Profil *
Zdravím,
potreboval by som aspoň nakopnúť na smer riešenia tohto problému.
Mám tabuľku s položkami IP,software,dátum_skenu. Je možné SQL príkazmi dosiahnúť to,
že po každom nasledujúcom skene (zmena dátum_skenu) do tabuľky pribudnú nové IP s inštalovaným software + pri IP s rovnakým software sa zmení dátum_skenu + pri existujúcej IP ak bol software odinštalovaný sa tento v tabuľke už neobjaví (nepotrebujem info o niekdajšej existencii software na počítači)

Ďakujem.
Joker
Profil
jago
Teď si nejsem jistý, jak je ta podmínka na aktualizaci data: stejná IP + stejný software?
A jak se pozná odinstalovaný software?

Přidal bych sloupec stav, třeba 0 = neaktivní, 1 = aktivní a pokud ta podmínka je tak jak jsem napsal, tak nastavit primární klíč složený ze sloupců IP a id_software a pak:
INSERT INTO tabulka (ip, id_software, datum, stav) VALUES ('$ip', $id_software, '$datum', 1) ON DUPLICATE KEY UPDATE datum='$datum'
...tohle tedy updatuje i sloupečky s odinstalovaným softwarem, ale to by nemuselo vadit. Pokud by to vadilo, šlo by udělat něco jako:
...ON DUPLICATE KEY UPDATE datum=IF(stav=1, '$datum', datum)
jago
Profil *
Výsledkom skenu je vždy zoznam v tvare IP,software,datum_skenu. T. j. ak sken prebehol vcera, tabuľka má tvar
ip1 software1 vcerajsi_datum
ip1 software2 vcerajsi_datum
ip1 software3 vcerajsi_datum
ip2 software1 vcerajsi_datum
ip3 software4 vcerajsi_datum

Dnesny sken dáva vysledok napriklad
ip1 software1 dnesny_datum
ip1 software3 dnesny_dátum
ip2 software1 dnesny_datum
ip2 software2 dnesny_datum
ip4 software1 dnesny_datum


Tento výsledok potrebujem zapracovat tak, aby vysledna tabulka mala nasledujúce data

ip1 software1 dnesny_datum
ip1 software3 dnesny_dátum
ip2 software1 dnesny_datum
ip2 software2 dnesny_datum
ip3 software4 vcerajsi_datum
ip4 software1 dnesny_datum

t.j. z pôvodného bola vymazaná ip1 software2 vcerajsi_datum (software sa odinštaloval), bola pridaná nová ip4 software1 dnesny_datum (nova ip) a zachovaná dnes nezoskenovaná ip3 software3 vcerajsi_datum.
Joker
Profil
jago
Aha. Zdá se, že by bylo vhodné to rozdělit na dvě tabulky, protože současná tabulka neumožňuje efektivně uložit jednu informaci: datum posledního skenu dané IP adresy.
(edit: respektive ani ne rozdělit, ale prostě přidat novou tabulku, která tuhle informaci bude držet)
Takže asi:
tabulka sken_ip: ip, datum_skenu; primární klíč ip
tabulka sken_software: ip, id_software, naposledy_zjisten; primární klíč ip, id_software
(a ještě by byla dobrá tabulka software, kde by k id_software byly informace o software)

A potom:
INSERT INTO sken_ip (ip,datum_skenu) VALUES($ip, '$datum') ON DUPLICATE KEY UPDATE datum_skenu='$datum'
INSERT INTO sken_software (ip, id_software, naposledy_zjisten) VALUES ($ip, $software, '$datum') ON DUPLICATE KEY UPDATE naposledy_zjisten='$datum'

...a vymazaný software by byl takový, kde platí: sken_ip.datum_skenu > sken_software.naposledy_zjisten
I tyhle záznamy by se mohly uchovávat a jednoduše nevypisovat. Anebo pokud je tam nechcete, stačilo by udělat DELETE FROM sken_software s tou uvedenou podmínkou.
jago
Profil *
Ďakujem. Toto bude asi fakt najrozumnesie riesenie, zda sa mi, že tabulku o datume scanu pre jednotlive ip vyuzijem viackrát.
Mna skor napadali riesenia s pridaním riadkov natvrdo do databázy, následné usporiadanie a ignorovanie 2,3,4 .... záznamu pri rovnakom primary key.
Vďaka.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0