Intereting Posts
Вызов неопределенной функции Symfony \ Polyfill \ Mbstring \ iconv_strlen () Сообщение Ajax Jequery без тега формы и без обновления Как очистить данные JSON, передаваемые через веб-сайты на целевом сайте Как вставить теги ссылок между тегами заголовка в HTML с помощью SimpleHtmlDom Имена файлов php со знаком подчеркивания Совместить весь текст между двумя тегами HTML, используя регулярное выражение в PHP как получить идентификатор из базы данных? PHP vs OO PHP – Какой из них использовать? найти в наборе в laravel? пример Отправить письмо с библиотекой электронной почты CodeIgnitor Сортировка только первого элемента в многоадресном массиве на основе идентификатора antoher в массиве (PHP) передача данных формы в mySQL через AJAX Строгая проверка и фильтрация HTML в PHP Как сохранить изменение разметки, которое я сделал, при переходе с одной страницы на другую? MySQL Daemon не удалось запустить – centos 6

Сложная футбольная лига Динамический заказ в MySQL?

У меня есть таблица игр для футбольной лиги следующим образом:

date home_team_id away_team_id home_score away_score - 1 2 6 21 - 3 1 7 19 

Я не могу понять, как динамически генерировать список идентификаторов команды, заказанных Wins (затем указывает, если возможно)?

У меня есть этот запрос, который отлично работает, когда у меня есть $ team_id, но из-за причины, тогда я могу делать только одну команду за раз, и это не позволяет заказывать на уровне запроса

 ((SELECT COUNT(*) FROM `games` WHERE ((`home_score` > `away_score`) AND `home_team_id` = '.$team_id.')) + (SELECT COUNT(*) FROM `games` WHERE ((`home_score` < `away_score`) AND `away_team_id` = '.$team_id.'))) AS `wins` 

Интересно, могу ли я использовать это с какой-то формой GROUP, или mySQL может знать сам файл $ team_id? Я также пробовал несколько кратных JOINs с таблицей «team», но они тоже не работали.

Благодаря,

Дэн

Solutions Collecting From Web of "Сложная футбольная лига Динамический заказ в MySQL?"

Может быть, это то, что вы ищете?

 SELECT all_wins.team_id, SUM(all_wins.wins) FROM ( SELECT home_team_id as team_id, SUM(IF(home_score > away_score,1,0)) as wins, SUM(home_score - away_score) as points FROM games GROUP BY home_team_id UNION ALL SELECT away_team_id as team_id, SUM(IF(away_score > home_score,1,0)) as wins, SUM(away_score - home_score) as points FROM games GROUP BY away_team_id ) all_wins GROUP BY all_wins.team_id ORDER BY SUM(all_wins.wins), SUM(all_wins.points) 

ETA: Оригинальный ответ не был полным, я думаю, что это должно быть лучше.

Внутренние два запроса, которые UNION'd вместе, получают выигрыш в домашних и отдаленных для каждой команды. Внешний запрос просто суммирует выигрыши дома и гостей для общего количества выигрышей.

Давайте сделаем это шаг за шагом:

Выберите выигранные игры дома и счет дома:

  SELECT COUNT(*) as wins, SUM(G.home_score) as score FROM games G WHERE G.team_id = T.team_id #See 3. query and you'll understand G.home_score > away_score 

Назовем этот результат HOME_GAMES.

Выберите выигранные игры и партию прочь игры:

 SELECT COUNT(*) as wins, SUM(G.away_score) as score FROM games G WHERE G.team_id = T.team_id #See 3. query and you'll understand G.away_score > G.home_score 

Назовем этот результат AWAY_GAMES.

Выберите общие выигранные игры и общий балл:

  SELECT (A.wins + H.wins) AS total_wins, (A.score + H.score) AS total_score FROM (AWAY_GAMES) AS A, (HOME_GAMES) AS H, teams T ORDER BY total_wins, total_score 

==> Объединяем все вместе, заменяя AWAY_GAMES и HOME_GAMES:

 SELECT (A.wins + H.wins) AS total_wins, (A.score + H.score) AS total_score FROM (SELECT COUNT(*) as wins, SUM(G.away_score) as score FROM games G WHERE G.team_id = T.team_id #See 3. and you'll understand G.away_score > G.home_score) AS A, (SELECT COUNT(*) as wins, SUM(G.home_score) as score FROM games G WHERE G.team_id = T.team_id #See 3. and you'll understand G.home_score > away_score) AS H, teams T ORDER BY total_wins, total_score 

Основываясь на решении Эрика – вот мой последний вопрос, если у кого-то есть аналогичная проблема – спасибо за помощь всем.

 SELECT `teams`.`id`, `teams`.`name`, SUM(`all_wins`.`gp`) AS `gp`, SUM(`all_wins`.`w`) AS `w`, SUM(`all_wins`.`l`) AS `l`, SUM(`all_wins`.`t`) AS `t`, SUM(`all_wins`.`ptf`) AS `ptf`, SUM(`all_wins`.`pta`) AS `pta` FROM ( SELECT `home_team_id` as `team_id`, COUNT(`home_score`) AS `gp`, SUM(IF(`home_score` > `away_score`,1,0)) as `w`, SUM(IF(`home_score` < `away_score`,1,0)) as `l`, SUM(IF(`home_score` = `away_score`,1,0)) as `t`, SUM(IFNULL(`home_score`,0)) as `ptf`, SUM(IFNULL(`away_score`,0)) as `pta` FROM `games` GROUP BY `home_team_id` UNION ALL SELECT `away_team_id` as `team_id`, COUNT(`home_score`) AS `gp`, SUM(IF(`away_score` > `home_score`,1,0)) as `w`, SUM(IF(`away_score` < `home_score`,1,0)) as `l`, SUM(IF(`away_score` = `home_score`,1,0)) as `t`, SUM(IFNULL(`away_score`,0)) as `ptf`, SUM(IFNULL(`home_score`,0)) as `pta` FROM `games` GROUP BY `away_team_id` ) `all_wins` LEFT JOIN `teams` ON `all_wins`.`team_id` = `teams`.`id` GROUP BY `all_wins`.`team_id` ORDER BY SUM(`all_wins`.`w`) DESC, SUM(`all_wins`.`ptf`) DESC