Доброе утро. Ищете предложение.
У меня три таблицы:
совпадения | MatchID | MatchDateTime | и т.д.... | Внешний видID | Внешний видPlayerID | AppearanceMatchID замены | ПодстановкаID | ЗамещениеPlayerIDIn | SubstitutionMatchID
Я пытаюсь отобразить список совпадений в порядке дат, которые включали игрока X ($ id) в виде либо полного внешнего вида (содержащегося в появлении), либо внешнего вида (содержащегося в подстановках). Игрок не появился бы в матче, как в обоих.
Результат будет выглядеть примерно так:
matchid | matchdate | type
1 | 2012-06-30 | (sub)
18 | 2012-07-10 | (full)
24 | 2012-07-17 | (full)
25 | 2012-07-24 | (full)
28 | 2012-07-31 | (full)
33 | 2012-09-05 | (sub)
Переменная $ id - это идентификатор проигрывателя, для которого я хочу отображать эти данные.
Есть несколько других таблиц, которые были включены в мою попытку ниже, которые есть, чтобы включить некоторые дополнительные данные сопоставления, но до сих пор это прогресс, который не возвращает строк. :/
SELECT
M.MatchID AS matchid,
DATE_FORMAT(M.MatchDateTime, '%b %D, %Y') AS time,
DATE_FORMAT(M.MatchDateTime, '%d/%m/%y') AS date,
M.MatchPlaceID AS place,
M.MatchNeutral AS neutral,
O.OpponentShort AS opponent,
O.OpponentID AS oppid,
MT.MatchTypeName AS matchtype,
M.MatchAdditionalType AS add_type,
M.MatchGoals AS goalsfor,
M.MatchGoalsOpponent AS goalsagainst,
M.MatchOvertime AS overtime,
M.MatchPenaltyShootout AS penalties,
M.MatchPenaltyGoals AS pensfor,
M.MatchPenaltyGoalsOpponent AS pensagainst
FROM
matches M, opponents O, matchtypes MT, appearances A, substitutions S
WHERE
(A.AppearanceMatchID = M.MatchID AND A.AppearancePlayerID = $id) OR
(S.SubstitutionMatchID = M.MatchID AND S.SubstitutionPlayerIDIn = $id) AND M.MatchOpponent = O.OpponentID AND M.MatchTypeID = MT.MatchTypeID
ORDER BY
M.MatchDateTime DESC
Я использую MYSQL 5.6.
Попробуй это
SELECT
M.MatchID AS matchid
DATE_FORMAT(M.MatchDateTime, '%b %D, %Y') AS time,
DATE_FORMAT(M.MatchDateTime, '%d/%m/%y') AS date,
M.MatchPlaceID AS place,
M.MatchNeutral AS neutral,
O.OpponentShort AS opponent,
O.OpponentID AS oppid,
MT.MatchTypeName AS matchtype,
M.MatchAdditionalType AS add_type,
M.MatchGoals AS goalsfor,
M.MatchGoalsOpponent AS goalsagainst,
M.MatchOvertime AS overtime,
M.MatchPenaltyShootout AS penalties,
M.MatchPenaltyGoals AS pensfor,
M.MatchPenaltyGoalsOpponent AS pensagainst
FROM
matches M
inner join
opponents O on M.MatchOpponent = O.OpponentID
inner join
matchtypes MT on M.MatchTypeID = MT.MatchTypeID
left join
appearances A on A.AppearanceMatchID = M.MatchID AND A.AppearancePlayerID = $id
left join
substitutions S on S.SubstitutionMatchID = M.MatchID AND S.SubstitutionPlayerIDIn = $id
WHERE
(A.AppearanceID is not null) OR
(S.SubstitutionID is not null)
ORDER BY
M.MatchDateTime DESC
и подумайте о том, как читать о объединениях, потому что, указав список таблиц, чтобы выбрать из них, а не явно присоединяться к ним, вы можете перейти к ситуации, когда MySQL будет выбирать перекрестное соединение