Zakładam taką tabele na głosy:
CREATE TABLE `votes` (
`v_id` MEDIUMINT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`a_id` MEDIUMINT( 8 ) UNSIGNED NOT NULL ,
`mark` TINYINT( 1 ) UNSIGNED NOT NULL ,
`ip` VARCHAR( 15 ) NOT NULL ,
`time` DATETIME NOT NULL ,
PRIMARY KEY ( `v_id` ) ,
INDEX ( `a_id` )
) TYPE = MYISAM ;
oraz tabela z artykułami:
CREATE TABLE `arts` (
`a_id` VARCHAR( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`mark_sum` INT( 11 ) UNSIGNED NOT NULL ,
`votes` INT( 11 ) UNSIGNED NOT NULL ,
`mark` FLOAT( 4 ) UNSIGNED NOT NULL ,
PRIMARY KEY ( `a_id` )
) TYPE = MYISAM
Głosy w zakresie 1-5, głosowanie raz na 24 godziny
Przy głosowaniu sprawdzam czy głosowano dzisiaj (SELECT IP ... WHERE time>NOW()-86400)
Jesli IP istnieje to wyswietlam komunikat ze juz glosowano, w przeciwnym wypadku dodaję głos
do 'votes' oraz wykonuję update 'arts' dodaję głos do sumy głosów i ilości (posiadam te dwa pola, bo chyba nie można po prostu dodwać do oceny głosu i dzielić przez 2 ;)
Czy można to optymalniej zrobić? Może typy pół w mysql mogłyby być bardziej optymalne? Albo jeszcze jakieś inne pomysły...?