Autor Zpráva
Anonymní
Profil *
Zdravim. Mam databazovu anketu. V databaze mam aj tabulku s ip adresami, kde je ID, IP adresa a TIMESTAP. Po kazdom pridani hlasu sa prida IP. Chcel som to urobit tak aby jedna IP mohla hlasovat povedzme len raz za 24 hodin. To by nebol problem, dam pri hlasoveni do selectu podmienku ze IP adresa = $_SERVER[REMOTE_ADDRESS] AND UNIX_TIMESTAMP()-UNIX_TIMESTAMP(timestap) < 24*60*60 a ked nebude COUNT() != 0 tak nezapisem
Ibaze som chcel urobit aj taku vec ze sa mi bude tabulka priebezne premazavat. Tak som si spravil TRIGGER ale bud som pako alebo nechapem preco ked dam do triggeru BEFORE INSERT nieco s DELETE vypise mi nejaku divnu chybu. Teda je to v MySQL. Pravdepodobne to tam asi funguje nejako divne.
Takze je moznost vsetky vyberat a do php prechadzat podmienkovat a nasledne posielat dotazy na mazanie.. no to mi nepride ako velmi efektivne riesenie..
Dalej ma napadlo ze by stacilo tie adresy v pripade ze existuju len updatovat, tedat ten TIMESTAP. To by bolo najlepsie. Ale sa moze stat ze v tabulke bude uz po 10000 hlasoch vela zaznamov, a nebudu premazana, bude trvad select dotaz na porovnanie dlhsie. Ked uvazujeme ze SELECT aj INSERT sa vykona pri kazdom hlasovani raz je treba zvazit ci je lepsie prejst 10000 zaznamov a potom jeden upravit alebo vlozit, ALEBO prejst si 50 zaznamov a potom VLOZIT a DELETNUT triggerom. Predpokladame ze sa nam po deletnuti pocet opat znizi... Ked ma niekto chut sa zamysliet, rad by som pocul vas nazor ako by ste najefektivnejsie riesili tento problem, pripadne ak ma niekto lesi napady navrhu funkcnosti systemu, sem s nimi ;)
Anonymní
Profil *
Vlastne som sa chcel este spytat ze preco neide ten trigger lebo uz som sa rozpisal ako by to bola hotova vec. Ale v mysql asi ta druha moznost neprichadza do uvahy. Vypisuje mi to Can't update table 'poll_ip' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

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