[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сложный вывод из БД
phpguest
Доброе время суток, мну нужен совет как правильно сделать вывод. я делаю футбольный сайт и на стартовом уровне разрабатываю показ статистике матча.

я разбил базу на таблицы

`matches` (
`id` int(11) NOT NULL,
`id_tour` int(11) NOT NULL,
`team1` varchar(55) NOT NULL,
`team2` varchar(55) NOT NULL,
`stadium` varchar(50) NOT NULL,
`scores` varchar(50) NOT NULL,
`time` varchar(50) NOT NULL,
`date` date NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;



`team` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
`img` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;


`events` (
`id` int(11) NOT NULL auto_increment,
`id_matches` int(11) NOT NULL,
`min` varchar(100) NOT NULL,
`ev` varchar(100) NOT NULL,
`name` varchar(100) NOT NULL,
`dop` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=6 ;


`players` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
`team` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=25 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=25 ;


и данные из (events и team) выводятся по критерию (WHERE id_matches='$id') и всё устраивает. Проблема в том что мне нужен список игроков команд то есть 11 + 11, 2 списка в столбике.

Подайте пожалуйста идею как можно это реализовать. чтобы можно было эти списки выводить из таблицы (players)




Спустя 12 часов, 55 минут, 47 секунд (13.10.2010 - 08:35) linker написал(а):
`team1` varchar(55) NOT NULL,
`team2` varchar(55) NOT NULL,
поправь на
`team1` int(11) NOT NULL,
`team2` int(11) NOT NULL,
чтобы эти поля ссылались на айдюки команд, тогда проще будет вытянуть и сами команды и их составы. Плюс не понятно, каким образом игроки привязаны к командам, имхо упущение. Вообщем надо прежде допиливать структуру таблиц и их логику, а уж потом браться за остальное.

Спустя 12 минут, 48 секунд (13.10.2010 - 08:47) phpguest написал(а):
в таблице будет поле (team) по которым я буду их сортировать.. но проблема не в этом... вот например у меня есть Матч с идентификатором 1 .. если я создам таблицу matches_pl создам 24 полей id , id_matches и 22 поля для id игроков...

можно ли как то сделать чтобы выведенные id игроков из matches_pl были критерием вывода из players.

то есть у меня из matches_pl выведены 22 идентификатора:
1,2,3,4,5,6,7,8,9 и т.д

можно ли эти идентификаторы использовать как параметр вывода то есть

WHERE id='идентификатор одного из игроков'

Спустя 16 минут, 55 секунд (13.10.2010 - 09:04) linker написал(а):
Зачем так много. Вот смотри как я вижу
`players` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
`teamid` int(11) NOT NULL, // Ссылка на id команды
PRIMARY KEY (`id`)
)
ENGINE=MyISAM AUTO_INCREMENT=25 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=25 ;

`matches_players` (
`matchid` int(11) NOT NULL, // Ссылка на id матча
`teamid` int(11) NOT NULL, // Ссылка на id команды
`playerid` int(11) NOT NULL, // Ссылка на id игрока
`yellowcard` tinyint(1) NOT NULL DEFAULT '0',
`redcard` tinyint(1) NOT NULL DEFAULT '0',
`coals` tinyint(4) NOT NULL DEFAULT '0'
)
Допустим мы знаем матч и какие команды играли, вытянем всех игроков которые играли в этом матче, бывает же так, что во время игры происходит замена игроков, а значит общее количество их может быть больше чем 11, ну например так
SELECT * FROM `matches_players` WHERE `matchid` = '1' AND `teamid` IN (1,2) ORDER BY `teamid` ASC
Идею вроде как дал.

Спустя 8 минут, 50 секунд (13.10.2010 - 09:13) phpguest написал(а):
разве если так сделать, для каждего мачта выходит в таблицу matches_players надо около 30 записей добавить? я по этому и разбил на больше таблиц...

Спустя 8 минут, 11 секунд (13.10.2010 - 09:21) linker написал(а):
Да нужно добавлять до 30 записей, но это не страшно, если немного пересмотреть типы полей, правильно расставить индексы, то все будет замечательно. Другого выхода нет, если делать правильно и по уму.

Спустя 9 минут, 2 секунды (13.10.2010 - 09:30) phpguest написал(а):
ок щас реализую и посмотрю какой результат будет,

а вот если мне нужно сортировка игроков например сначало идет вратарь потом зашита потом полузашита и в нападаюшие.. они же буду по ид выделятся .... вратарь может в последние например вылезти... когда там нападаюшие

Спустя 7 минут, 1 секунда (13.10.2010 - 09:37) linker написал(а):
В таблице с игроками добавь целочисленное поле "Тип игрока", например, `type`. Потом JOIN `players` и сортируй по этому полю. Например
SELECT * FROM `matches_players` 
LEFT JOIN `players` ON `id` = `playerid`
WHERE `matchid` = '1'
ORDER BY `teamid` ASC, `type` ASC
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.