Hat-Trick, минут 30 разглядывал твои условия, но то ли я идиот, то ли лыжи не едут![]()
Вообще то у каждой игры уник должен быть, напр. дата начала игры плюс стадион.
Hat-Trick, минут 30 разглядывал твои условия, но то ли я идиот, то ли лыжи не едут![]()
Вообще то у каждой игры уник должен быть, напр. дата начала игры плюс стадион.
kantry, Так это есть. Я же дал минимум, выборку по датам я сам могу докрутить.
У каждого матча есть дата начала, но что если обработчик или сайт откажут и через пару часов будет уже 2 матча висеть не сыгранных на команде? Для этого и нужная такая защита. Если предполагается, что у команды 2 и более матча в данный момент висят, то обрабатывать их по порядку, а второй в скрипт не брать.
Hat-Trick,
транзакции же тразанкции..
Hat-Trick, ты меня не понял, уникальный, это значит что другого не может быть в принципе! Пусть сколько угодно будет обработчиков.
Если у тебя по другому, это значит не верно спроектировано хранилище.
kantry, так уникальный это ID матча
Hat-Trick, или я изъясняюсь не правильно, или ты понять не хочешь. Раз тебе приходится из 2-х одинаковых выбирать, то при чем тут ай-ди? Уникальные свойства у матча. Что бы ты не мог повторы в таблицу добавить.
Блин как мне много писать приходится
Перед вставкой проверяй, или задай в таблице уник на несколько полей.
kantry, Так это ты не понимаешь))
Команда 1 и Команда 2 играют 18.03.2021 в 12:00 матч по расписанию. Но в 11:00 сайт падает.
Через сутки всё восстанавливается а у Команды 1 и Команды 2 ещё есть матчи в календаре с другими командами на 18.03.2021 в 22:00.
Итого из-за того, что сервер был недоступен, обработчик не "сыграл" первый матч. А теперь по выборке этих матчей уже 2. 2 матча у одной команды проходить не может. Значит наш запрос берёт первый матч и игнорирует следующие для этих команд. Когда матч закончится, начинается обработка других. Таким образом сколько бы не было пропущенных матчей всё будет в норме.
kantry, Ты верно пишешь, что повторов быть не должно и это так. У одной и той же команды не может быть матч в одно и тоже время, но он может быть если первый матч не был сыгран по техническим причинам, а время второго уже подошло.
Hat-Trick, хрен знает
я скоро футмен изучу
вообще бы 3 таблицы сделал, а потом как хочешь можно данными манипулировать
CREATE TABLE `games` (
`id_game` int(11) NOT NULL AUTO_INCREMENT,
`date_game` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Время матча',
PRIMARY KEY (`id_game`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT 'Все игры';
-- дамп ВСЕХ игр
INSERT INTO `games` VALUES (1,'2021-02-28 16:00:00'),(2,'2021-03-01
16:00:00'),(3,'2021-03-12 16:00:00'),(4,'2021-01-13
16:00:00'),(5,'2021-03-16 16:00:00'),(6,'2021-03-18 16:00:00');
CREATE TABLE `result` (
`id_result` int(11) NOT NULL AUTO_INCREMENT,
`id_team` int(11) NOT NULL,
`id_game` int(11) NOT NULL,
`goals` int(11) DEFAULT NULL COMMENT 'Забитых/пропущеных голов за игру',
PRIMARY KEY (`id_result`),
KEY `idx_result_id_game` (`id_game`),
KEY `idx_result_id_team` (`id_team`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT 'Итоги игр';
-- дамп результатов
INSERT INTO `result` VALUES
(1,1,1,3),(2,5,1,2),(3,2,2,1),(4,5,2,4),(5,3,3,5),(6,5,3,5),(7,4,4,0),(8,5,4,1),(9,6,5,NULL),(10,7,5,NULL);
CREATE TABLE `teams` (
`id_team` int(11) NOT NULL AUTO_INCREMENT,
`name_team` varchar(64) NOT NULL COMMENT 'Названия команд',
PRIMARY KEY (`id_team`),
UNIQUE KEY `name_team` (`name_team`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT 'Список команд';
-- дамп команд
INSERT INTO `teams` VALUES (7,'Ален Делон'),(6,'Атланта Сити'),(2,'Гладиатор
Сочи'),(1,'Динамо Машина'),(4,'Крылья Депутатов'),(3,'Паровоз
Абакан'),(5,'Реал Анадырь');CREATE VIEW ViewGames
AS SELECT
RST.id_team,TMS.name_team AS 'Хозяева',
RST.goals AS 'Забито',
TMS_1.name_team AS 'Гости',
RST_1.goals AS 'Пропущено',
(RST.goals - RST_1.goals) AS 'Очков',
GMS.date_game AS 'Время матча'
FROM result RST
JOIN games GMS ON RST.id_game = GMS.id_game
JOIN result RST_1 ON RST_1.id_game = GMS.id_game
JOIN teams TMS_1 ON TMS_1.id_team = RST_1.id_team
JOIN teams TMS ON TMS.id_team = RST.id_team
WHERE RST.id_team <> RST_1.id_team /* если нужны все */
-- AND NOT ISNULL(RST.goals) /* если нужны сыгранные */
AND ISNULL(RST.goals) /* если нужны НЕ сыгранные */kantry, Спасибо, всё есть ![]()
Названия команд рассмешили ![]()