Я занимаюсь разработкой веб-сайта для покерного клуба, и они хотели бы показать рейтинг своих игроков. Игроки играют в турнирах, и за каждое размещение начисляется заранее определенное количество очков. Затем клуб хотел бы показать таблицу игроков, упорядоченных по накопленным очкам.
Клуб вводит эти данные в CMS, и есть четыре таблицы базы данных. Оператор create для этих таблиц (некоторые поля удалены для ясности):
CREATE TABLE `players` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
);
CREATE TABLE `players_tournaments` (
`player_id` int(10) unsigned NOT NULL,
`tournament_id` int(10) unsigned NOT NULL,
KEY `player_id` (`player_id`),
KEY `tournament_id` (`tournament_id`)
);
CREATE TABLE `tournaments` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL
PRIMARY KEY (`id`)
);
CREATE TABLE `tournaments_placings` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tournament_id` int(10) unsigned NOT NULL,
`player_id` int(10) unsigned NOT NULL,
`placing_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `tournament_id` (`tournament_id`),
KEY `player_id` (`player_id`),
KEY `placing_id` (`placing_id`)
);
ALTER TABLE `players_tournaments`
ADD CONSTRAINT `players_tournaments_ibfk_3` FOREIGN KEY (`player_id`) REFERENCES `players` (`id`),
ADD CONSTRAINT `players_tournaments_ibfk_4` FOREIGN KEY (`tournament_id`) REFERENCES `tournaments` (`id`);
ALTER TABLE `tournaments_placings`
ADD CONSTRAINT `tournaments_placings_ibfk_1` FOREIGN KEY (`tournament_id`) REFERENCES `tournaments` (`id`),
ADD CONSTRAINT `tournaments_placings_ibfk_2` FOREIGN KEY (`player_id`) REFERENCES `players` (`id`),
ADD CONSTRAINT `tournaments_placings_ibfk_3` FOREIGN KEY (`placing_id`) REFERENCES `placings` (`placing`);
Надеюсь, это не говорит о том, как она связана со структурой именования таблиц, но информация о внешнем ключе также присутствует там.
Существует также пятая таблица, placings
, которая имеет два столбца: placing_id
, который является просто PRIMARY KEY
столбцом; и points
, в котором хранится количество баллов, которые должны быть присуждены за это место.
Вопрос: Как бы выглядел мой запрос, чтобы получить совокупные очки всех игроков за все турниры, основываясь на структуре очков, определенной в моей таблице placings
?
Я видел различные решения для таких вещей, как таблица футбольной лиги, но в ней есть система очков в запросе (т.е. 3 очка за победу, 1 очко за ничью, 0 очков за поражение), тогда как моя покерная лига В примере гораздо больше различий, поскольку это не случай выигрыша, проигрыша и ничьей.
Любая помощь в этом будет принята с благодарностью.