Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Присоединить ID к результату / 2 сообщений из 2, страница 1 из 1
04.05.2017, 15:15
    #39448771
MariyaS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присоединить ID к результату
На вход поступает строка и известен ID игры, предположим, что он равен 95.

Есть следующие таблицы.

1. games (Таблица игр), в ней лежат две заявки команд (А и Б) на матч
2. bids_teams_matches (Зявки команд на матчи)
3. bids_players_matches ( Заявки игроков на матчи), в ней есть ссылки на id заявок команд на матчи и id заявок игроков на чемпионат

4. bids_teams_champs (Заявки команд на чемпионаты)
5. bids_players_champs (Заявки игроков на чемпионаты) - в ней есть ссылка на player_id, это id игрока из таблицы players

6. Players (игроки) - отсюда нужно достать 3 поля first_name, second_name, last_name от неполного вхождения строки


Прикладываю схематично


Вопрос - как, зная ID игры получить только тех игроков, которые заявлены на текущий матч, это я получаю следующим запросом

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SELECT sfc_players.`first_name`, sfc_players.`second_name`, sfc_players.`last_name`
FROM `sfc_players`
WHERE sfc_players.`id` 
IN (SELECT 
    sfc_bids_players_champs.`player_id` 
    FROM `sfc_bids_players_champs`
    WHERE sfc_bids_players_champs.`id` 
    IN (
        SELECT sfc_bids_players_matches.`bid_player_champ_id`
        FROM `sfc_bids_players_matches`
        WHERE sfc_bids_players_matches.`bid_team_match_id`
        IN (
        	SELECT sfc_games.`team_a_btm_id`
            FROM `sfc_games`
            WHERE sfc_games.`id` = 95
        )
        OR sfc_bids_players_matches.`bid_team_match_id`
        IN (
        	SELECT sfc_games.`team_b_btm_id`
            FROM `sfc_games`
            WHERE sfc_games.`id` = 95
        )
   )
)



Но проблема в том, что к результирующей выборке нужно присоединить ID из таблицы sfc_bids_players_matches, не могу это сделать
...
Рейтинг: 0 / 0
05.05.2017, 00:27
    #39449066
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присоединить ID к результату
MariyaS,

Как-то может вот так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT 
	gm.id, players1.first_name, players1.second_name, players1.last_name
FROM sfc_games AS gm
INNER JOIN sfc_bids_teams_matches AS bid1 ON gm.team_a_btm_id = bid1.id
INNER JOIN sfc_bids_players_matches AS pm1 ON bid1.id = pm1.bid_team_match_id
INNER JOIN sfc_bids_players_champs AS pc1 ON pm1.bid_player_champ_id = pc1.id
INNER JOIN sfc_players AS players1 ON pc1.player_id = players1.id
WHERE gm.id = 155

UNION ALL 

SELECT 
	gm.id, players2.first_name, players2.second_name, players2.last_name
FROM sfc_games AS gm
INNER JOIN sfc_bids_teams_matches AS bid2 ON gm.team_b_btm_id = bid2.id
INNER JOIN sfc_bids_players_matches AS pm2 ON bid2.id = pm2.bid_team_match_id
INNER JOIN sfc_bids_players_champs AS pc2 ON pm2.bid_player_champ_id = pc2.id
INNER JOIN sfc_players AS players2 ON pc2.player_id = players2.id
WHERE gm.id = 155



Но структура очень избыточная и все эти промежуточные таблицы нафиг не нужны.
Если есть возможность, рекомендовал бы сразу переделать на простую таблицу со связями (game_id, team_id, player_id, ...).

А всякий шлак типа заявок команд на сезон или игроков на сезон - отношения к конкретным матчам они в принципе не имеют - это чисто справочная инфа.
Это так если взглянуть в лицо суровой правде предметной области )))
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Присоединить ID к результату / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]