среднее количество голосов за игру: SELECT avg(vote) FROM votes WHERE gid = $gid;
количество голосов за игру: SELECT count(uid) FROM votes WHERE gid = $gid;
Поскольку у вас не будет идентификаторов пользователей или игр, меньших 0
, вы можете сделать их целыми числами без знака (int(8) unsigned NOT NULL
).
Если вы хотите, чтобы пользователь мог сделать только один голос за игру, то создайте первичный ключ над uid
и gid
в таблице votes
вместо обычного индекса.
CREATE TABLE IF NOT EXISTS `votes` (
`uid` int(8) unsigned NOT NULL,
`gid` int(8) unsigned NOT NULL,
`vote` int(1) NOT NULL,
PRIMARY KEY (`gid`, `uid`)
) ;
Порядок полей первичного ключа (сначала gid
, затем uid
) важен, поэтому индекс сначала сортируется по gid
. Это делает индекс особенно полезным для выбора с заданным значением gid
. Если вы хотите выбрать все голоса, полученные данным пользователем, добавьте еще один индекс, набрав uid
.
Я бы порекомендовал InnoDB для механизма хранения, потому что особенно при высоких нагрузках блокировка таблиц снизит вашу производительность. Для повышения производительности чтения вы можете внедрить систему кэширования, используя APC, Memcached или другие.