Autor | Zpráva | ||
---|---|---|---|
jago Profil * |
#1 · Zasláno: 8. 7. 2008, 09:32:59
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 |
#2 · Zasláno: 8. 7. 2008, 09:59:37
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 * |
#3 · Zasláno: 8. 7. 2008, 10:26:48
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 |
#4 · Zasláno: 8. 7. 2008, 11:27:35 · Upravil/a: Joker
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 * |
#5 · Zasláno: 8. 7. 2008, 13:47:10
Ď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. |
||
Časová prodleva: 16 let
|
0