Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Имеется БД "Кегельная лига". В ней содержатся таблицы с игроками(Gamer), командами(Team), капитанами команд(Participant), списком игр(Games) и результатами игр(Bout). Согласно заданию необходимо определить встречу, на которой разница между выбитыми кеглями соревнующихся команд (команда по 3 человека, всего 4 команды), максимальна. Как это осуществить, если таблица выглядит следующим образом:
1 Весенняя баталия Александров 10
2 Весенняя баталия Махеев 5
3 Весенняя баталия Донской 0
4 Весенняя баталия Авронин 7
5 Весенняя баталия Матрешкин 8
6 Весенняя баталия Глыбенков 4
7 Баталион Тратилов 5
8 Баталион Кривошеин 0
9 Баталион Серый 8
10 Баталион Астахов 5
11 Баталион Красилов 4
12 Баталион Ильин 8
13 Мясорубка Александров NULL
14 Мясорубка Махеев NULL
15 Мясорубка Донской 5
16 Мясорубка Тратилов 5
17 Мясорубка Кривошеин 7
18 Мясорубка Серый 4
19 23 февраля Авронин 7
20 23 февраля Матрешкин 7
21 23 февраля Глыбенков 9
22 23 февраля Астахов 10
23 23 февраля Красилов 2
24 23 февраля Ильин 3
25 8 марта Александров 12
26 8 марта Махеев 5
27 8 марта Донской 7
28 8 марта Астахов NULL
29 8 марта Красилов NULL
30 8 марта Ильин 5
где первое - игра(Game), второе - фамилия игрока(Participant), третье - набранные им в данной игре очки(Point).
Как я понял, надо просуммировать результат каждой команды в каждой игре и вычесть из результата команды противника, после чего определить максимум, но как это сделать, я понять не могу. Спасибо, что обратили внимание. Описал, как смог.
Отредактированно pkhell (23.03.2011 18:05:58)
Неактивен
Я тоже понять не могу , так как вы не представили данных о том кто в какой команде и какие команды между собой играют.
Неактивен
Сейчас попробую организовать необходимую информацию. Извините, просто не знаю, что именно надо.
Таблица Gamer
1 Андрей Александров 8-548-789-11-45 Солнечная, дом 25
2 Юрий Махеев 8-489-215-55-69 Полярная, дом 79
3 Сергей Донской 8-789-548-15-69 Западная, дом 25
4 Алексей Авронин 8-159-357-45-98 Западная, дом 78
5 Алексей Матрешкин 8-156-354-74-56 Новояровая, дом 77
6 Анатолий Глыбенков 8-897-645-12-56 Сельская, дом 132
7 Максим Тратилов 8-489-648-12-54 Синяя, дом 88
8 Василий Кривошеин 8-582-697-14-35 Панфиловцев, дом 243
9 Ваня Серый 8-478-985-45-58 Юрина, дом 82
10 Андрей Астахов 8-852-963-78-12 Горная, дом 34
11 Никита Красилов 8-587-512-56-98 Гончарная, дом 78
12 Илья Ильин 8-456-987-32-56 Гончарная, дом 32
где Name1 - первое поле, Name2 - второе поле, доп.информация, думаю, не важна
Games
1 Весенняя баталия 2011-02-12 спорт-бар "Кегли"
2 Баталион 2011-03-09 Спорт-бар 'Мочилово'
3 Мясорубка 2011-04-06 Стадион 'Ессентуки'
4 23 февраля 2011-02-23 Площадь победы
5 8 марта 2011-03-08 MilaVitsa
6 1 апреля 2011-04-01 Дворец спорта
Name - Название игры, Data - дата, Area - место встречи
Participant
1 Неудержимые Александров
2 Неудержимые Махеев
3 Неудержимые Донской
4 Суворовцы Авронин
5 Суворовцы Матрешкин
6 Суворовцы Глыбенков
7 Орда Тратилов
8 Орда Кривошеин
9 Орда Серый
10 Альянс Астахов
11 Альянс Красилов
12 Альянс Ильин
Name - Название команды, Participant - Фамилия игрока.
1 Встреча - Весенняя баталия - играет 1 и 2 команда (Неудержимые(1) и Суворовцы(2))
2 Встреча - Баталион - играет 3 и 4 команда (Орда(3) и Альянс(4)) )))
3. Встреча 1 и 3 команды
4 Встреча 2 и 4 команды
5 Встреча 1 и 4 команды
6 Встреча 2 и 3 команды
Дополнение к таблице Bout
Game
31 1 апреля Авронин 4
32 1 апреля Матрешкин 10
33 1 апреля Глыбенков 11
34 1 апреля Тратилов 5
35 1 апреля Кривошеин 6
36 1 апреля Серый 10
Если и здесь криво описал, что не маловероятно, то могу скинуть саму базу, глянете. Работа осуществляется в среде Phpmyadmin.
Неактивен
Что-то стало ещё запутанней. Приведите результат show create table `имя таблицы`; для используемых таблиц.
Неактивен
CREATE TABLE `Bout` (
`id` int(11) NOT NULL auto_increment,
`Game` varchar(255) NOT NULL,
`Participant` varchar(255) NOT NULL,
`Point` varchar(255) default NULL,
`Number` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=37 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=37 ;
--
-- Дамп данных таблицы `Bout`
--
INSERT INTO `Bout` VALUES (1, 'Весенняя баталия', 'Александров', '10', '1');
INSERT INTO `Bout` VALUES (2, 'Весенняя баталия', 'Махеев', '7', '1');
INSERT INTO `Bout` VALUES (3, 'Весенняя баталия', 'Донской', '0', '1');
INSERT INTO `Bout` VALUES (4, 'Весенняя баталия', 'Авронин', '5', '1');
INSERT INTO `Bout` VALUES (5, 'Весенняя баталия', 'Матрешкин', '8', '1');
INSERT INTO `Bout` VALUES (6, 'Весенняя баталия', 'Глыбенков', '4', '1');
INSERT INTO `Bout` VALUES (7, 'Баталион', 'Тратилов', '5', '1');
INSERT INTO `Bout` VALUES (8, 'Баталион', 'Кривошеин', '0', '1');
INSERT INTO `Bout` VALUES (9, 'Баталион', 'Серый', '8', '1');
INSERT INTO `Bout` VALUES (10, 'Баталион', 'Астахов', '5', '1');
INSERT INTO `Bout` VALUES (11, 'Баталион', 'Красилов', '4', '1');
INSERT INTO `Bout` VALUES (12, 'Баталион', 'Ильин', '8', '1');
INSERT INTO `Bout` VALUES (13, 'Мясорубка', 'Александров', NULL, '2');
INSERT INTO `Bout` VALUES (14, 'Мясорубка', 'Махеев', NULL, '2');
INSERT INTO `Bout` VALUES (15, 'Мясорубка', 'Донской', '5', '2');
INSERT INTO `Bout` VALUES (16, 'Мясорубка', 'Тратилов', '5', '2');
INSERT INTO `Bout` VALUES (17, 'Мясорубка', 'Кривошеин', '7', '2');
INSERT INTO `Bout` VALUES (18, 'Мясорубка', 'Серый', '4', '2');
INSERT INTO `Bout` VALUES (19, '23 февраля', 'Авронин', '7', '2');
INSERT INTO `Bout` VALUES (20, '23 февраля', 'Матрешкин', '7', '2');
INSERT INTO `Bout` VALUES (21, '23 февраля', 'Глыбенков', '9', '2');
INSERT INTO `Bout` VALUES (22, '23 февраля', 'Астахов', '10', '2');
INSERT INTO `Bout` VALUES (23, '23 февраля', 'Красилов', '2', '2');
INSERT INTO `Bout` VALUES (24, '23 февраля', 'Ильин', '3', '2');
INSERT INTO `Bout` VALUES (25, '8 марта', 'Александров', '12', '3');
INSERT INTO `Bout` VALUES (26, '8 марта', 'Махеев', '5', '3');
INSERT INTO `Bout` VALUES (27, '8 марта', 'Донской', '7', '3');
INSERT INTO `Bout` VALUES (28, '8 марта', 'Астахов', NULL, '3');
INSERT INTO `Bout` VALUES (29, '8 марта', 'Красилов', NULL, '3');
INSERT INTO `Bout` VALUES (30, '8 марта', 'Ильин', NULL, '3');
INSERT INTO `Bout` VALUES (31, '1 апреля', 'Авронин', NULL, '3');
INSERT INTO `Bout` VALUES (32, '1 апреля', 'Матрешкин', '10', '3');
INSERT INTO `Bout` VALUES (33, '1 апреля', 'Глыбенков', '11', '3');
INSERT INTO `Bout` VALUES (34, '1 апреля', 'Тратилов', '5', '3');
INSERT INTO `Bout` VALUES (35, '1 апреля', 'Кривошеин', '6', '3');
INSERT INTO `Bout` VALUES (36, '1 апреля', 'Серый', '10', '3');
CREATE TABLE `Games` (
`id` int(11) NOT NULL auto_increment,
`Name` varchar(255) NOT NULL,
`Date` date NOT NULL,
`Area` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;
--
-- Дамп данных таблицы `Games`
--
INSERT INTO `Games` VALUES (1, 'Весенняя баталия', '2011-02-12', 'спорт-бар "Кегли"');
INSERT INTO `Games` VALUES (2, 'Баталион', '2011-03-09', 'Спорт-бар ''Мочилово''');
INSERT INTO `Games` VALUES (3, 'Мясорубка', '2011-04-06', 'Стадион ''Ессентуки''');
INSERT INTO `Games` VALUES (4, '23 февраля', '2011-02-23', 'Площадь победы');
INSERT INTO `Games` VALUES (5, '8 марта', '2011-03-08', 'MilaVitsa');
INSERT INTO `Games` VALUES (6, '1 апреля', '2011-04-01', 'Дворец спорта');
CREATE TABLE `Participant` (
`id` int(11) NOT NULL auto_increment,
`Name` varchar(255) NOT NULL,
`Participant` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=13 ;
--
-- Дамп данных таблицы `Participant`
--
INSERT INTO `Participant` VALUES (1, 'Неудержимые', 'Александров');
INSERT INTO `Participant` VALUES (2, 'Неудержимые', 'Махеев');
INSERT INTO `Participant` VALUES (3, 'Неудержимые', 'Донской');
INSERT INTO `Participant` VALUES (4, 'Суворовцы', 'Авронин');
INSERT INTO `Participant` VALUES (5, 'Суворовцы', 'Матрешкин');
INSERT INTO `Participant` VALUES (6, 'Суворовцы', 'Глыбенков');
INSERT INTO `Participant` VALUES (7, 'Орда', 'Тратилов');
INSERT INTO `Participant` VALUES (8, 'Орда', 'Кривошеин');
INSERT INTO `Participant` VALUES (9, 'Орда', 'Серый');
INSERT INTO `Participant` VALUES (10, 'Альянс', 'Астахов');
INSERT INTO `Participant` VALUES (11, 'Альянс', 'Красилов');
INSERT INTO `Participant` VALUES (12, 'Альянс', 'Ильин');
Отредактированно pkhell (24.03.2011 00:23:23)
Неактивен
А зачем вы храните текстовую информацию, там где можно использовать число?
Например, в таблице `Bout` для полей `Game` и `Participant` вместо varchar(255) вы можете использовать mediumint и хранить идентификатор записи из соответствующей таблицы.
Например, результат каждой команды в каждой игре.
select `Game`, `Name`, sum(`point`) from `Bout` join `Participant` using(`Participant`) group by 1,2;
http://dev.mysql.com/doc/refman/5.5/en/join.html
Вот только я настоятельно рекомендую вам сначала изменить структуру базы, избавившись от лишних текстовых полей.
Неактивен
Я бы мог, но суть в том, что нельзя. Какая есть, такую и надо использовать. После описанного Вами запроса, как я понял, осталось вычесть разницу и взять MAX. Попробую. Вот только пока не понимаю, как? Спасибо.
Отредактированно pkhell (23.03.2011 20:43:52)
Неактивен
Что-то не толкается на свершение важного действия та серая штука, находящаяся в голове. Пытался вытащить MAX из полученных значений и сделать Count, чтобы получать значения 1 для команд победителей. Не получается. Очень прошу помочь, так как горю.
Отредактированно pkhell (23.03.2011 21:09:50)
Неактивен
Неактивен
Огромнейшее спасибо. Сейчас буду разбираться. Вы, если что, сможете с еще одним помочь? Просто у меня было 10 запросов, 8 я сделал, с одним вы помогли, один еще остался? И еще, Вы случайно не знаете, почему при делении вместо обычной 1, допустим, получается 1.000 и как от этого избавиться?
Отредактированно pkhell (23.03.2011 21:47:19)
Неактивен
Потому, что при делении получается вещественное число. Используйте округление или целочисленное деление.
select 6 div 6;
Неактивен
Понял, спасибо. Сейчас пересчитаю.
Неактивен