Как создать источник записей MYSQL для двух связанных таблиц - PullRequest
0 голосов
/ 28 января 2012

У меня в настоящее время есть страница, которая отображает информацию об игроке из одной таблицы с именем "tblplayers". В данный момент я использую запрос:

$result = mysql_query("SELECT * FROM tblPlayers WHERE lng_RecordID_PK = '".$playerid."' ");

У меня есть вторая таблица с именем "tblMatches", содержащая результаты матчей для игроков. Я хочу, чтобы набор записей включал строки из "tblMatches", ГДЕ "P1_ID" ИЛИ "P2_ID" равен полю "lng_RecordID_PK" из "tblPlayers".

Как я могу изменить свой запрос $ result, чтобы он возвращал:

  • один ряд из tblPlayers
  • несколько строк из tblMatches

???

Спасибо за помощь.

Ответы [ 3 ]

5 голосов
/ 28 января 2012

Это называется присоединением:

SELECT tblPlayers.*, tblMatches.*
FROM tblPlayers
LEFT JOIN tblMatches ON Ing_RecordID_PK IN (P1_ID, P2_ID)
3 голосов
/ 28 января 2012

Вы спрашиваете о соединении двух таблиц, где вторая таблица потенциально имеет несколько записей для каждой в первой таблице.Это соединение «один ко многим» или «1: N», и чаще всего оно выполняется с использованием LEFT JOIN, что означает, что вы хотите все в «левой» таблице и все записи, которые соответствуют «правой» таблице, и что выможет быть несколько записей на левой стороне без совпадений.

Ваш запрос будет выглядеть следующим образом:

SELECT *
FROM tblPlayers
LEFT JOIN tblMatches
    ON (tblPlayers.lng_RecordID_PK = tblMatches.P1_ID
        OR tblPlayers.lng_RecordID_PK = tblMatches.P2_ID)
WHERE tblPlayers.lng_RecordID_PK = @PlayerID;

Полезные советы:

  • Избегатьвыделите все столбцы (*) и вместо этого выберите только те, которые вам нужны для запроса.
  • Рассмотрите возможность использования параметризованных запросов, чтобы избежать атак внедрения SQL.Если ваша переменная будет отправлена ​​или изменена злонамеренно, это может привести к скомпрометированным данным или безопасности.(См., Например, Объекты данных PHP .)
0 голосов
/ 28 января 2012

Нет способа получить строки из двух разных таблиц так, как вы описываете.Вы не можете получить строку из одной таблицы и две строки из другой.Вы могли бы сделать два отдельных запроса или использовать оператор JOIN для объединения двух таблиц, а затем получить результаты из полученной объединенной таблицы.Если вы предоставите больше информации о структуре вашей таблицы, я уверен, что вам может быть оказана дополнительная помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...