2015-05-13 2 views
0

У меня есть несколько разных таблиц в моей базе данных (mySQL).Поиск нескольких таблиц в базе данных MySQL

Вот соответствующие coumns для таблиц

table_tournaments

  1. tournamentId
  2. tournamnetName
  3. tournamentStatus

table_tournament_results

  1. tournamentId
  2. playerId
  3. Playername
  4. playerRank
  5. tournamnetParticipants

table_players

  1. playerId
  2. Playername

В таблице турниров содержит информацию о турнире, таблица результатов турнира показывает результаты этой таблицы

Я хочу найти таблицу турниров по имени, а затем возвращаемые результаты получить информацию из таблицы результатов турнира.

SELECT * FROM `tournaments` `WHERE` `tournamentName` LIKE "%Query%" 

Я не уверен, как идти об этом, может быть, мне нужно сделать что-то через PHP, любые и все помощь приветствуется.

+0

tournamnetParticipants <-. что это такое – Strawberry

+0

это подсчет, сколько человек приняли участие в турнире?. – aRrOwDreWLs

ответ

2

Результаты поиска по вашему запросу .

Это пример внешнего соединения, возвращая все строки из t, которые имеют строка 'foo' появляться как часть tournament_name, вместе с любыми соответствующими строками из r.

Связь между строками в двух таблицах устанавливается путем хранения общей стоимости в столбце tournamentId двух таблиц. Предикат в предложении ON определяет условие, которое определяет, соответствует ли строка.

SELECT t.tournamentId 
     , t.tournamentName 
     , t.tournamentStatus 
     , r.playerId 
     , r.playerName 
     , r.playerRank 
    FROM table_tournaments t 
    LEFT 
    JOIN table_tournament_results r 
    ON r.tournamentId = t.tournamentId 
    WHERE t.tournament_name LIKE '%foo%' 
    ORDER 
    BY t.tournamentId 
     , r.playerId 

t и r, которые появляются после того, как имена таблиц являются таблицы псевдонимами, мы можем претендовать ссылки на столбцы в каждой таблице предварив имя столбца с псевдонимом таблицы и точкой. Это делает столбец однозначным.(В случае tournamentId MySQL не знает, ссылаетесь ли вы на столбец в t или r, поэтому мы квалифицируем его, чтобы сделать его явным. Мы следуем этому шаблону для всех ссылок на колонки. Затем кто-то читает заявление не нужно задаваться вопросом, какая таблица содержит столбец playerId

+0

Что делает аргумент или предложение 'LEFT'? – aRrOwDreWLs

+0

'LEFT JOIN' указывает на ** внешнее соединение **. В нем говорится, что мы хотим вернуть ** все ** строки из таблицы со стороны * left * ('t') вместе с любыми совпадающими строками из таблицы на * правой стороне (' r'). Если в 'r' нет соответствующей строки, возвращается строка из' t' (левая часть), но с значениями NULL вместо столбцов из 'r'. Если каждая строка, возвращаемая из 't', имеет хотя бы одну совпадающую строку в' r', тогда результат будет таким же, как ** inner join **. Мы увидели бы только разницу, где строки «отсутствуют» из 'r'. – spencer7593

+0

Отличное объяснение, большое спасибо! – aRrOwDreWLs

0

Ваш запрос может быть, как это

SELECT a.*, b.tournamnetName FROM table_tournament_results a 
left join table_tournaments on a.tournamentId=b.tournamentId 
WHERE b.tournamnetName LIKE "%Query%" 
+0

Предикат в предложении WHERE эффективно отрицает «изящество» LEFT JOIN. (Условный тест гарантирует нам, что никакие строки не будут возвращены с NULL значением для 'tournamentName', поэтому любые NULL-значные строки из' b', созданные внешним соединением, будут отброшены, что будет эквивалентно внутреннему соединению. – spencer7593