如何为两个相关表创建MYSQL记录源

时间:2012-01-27 20:13:28

标签: php mysql join filter

我目前有一个页面显示一个名为“tblplayers”的表格中的玩家信息。我目前使用的查询是:

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

我有一个名为“tblMatches”的第二个表,其中包含玩家的匹配结果。我希望记录集包含来自“tblMatches”的行WHERE“P1_ID”或“P2_ID”等于“tblPlayers”中的“lng_RecordID_PK”字段。

如何修改$ result查询以便返回:

  • 来自tblPlayers的一行
  • 来自tblMatches的多行

???

感谢您帮助我。

3 个答案:

答案 0 :(得分:5)

这称为'加入':

SELECT tblPlayers.*, tblMatches.*
FROM tblPlayers
LEFT JOIN tblMatches ON Ing_RecordID_PK IN (P1_ID, P2_ID)

答案 1 :(得分:3)

您要求加入两个表,其中第二个表可能在第一个表中为每个表创建多个记录。这是一对多或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 Data Objects。)

答案 2 :(得分:0)

无法以您描述的方式从两个不同的表中获取行。您无法从一个表中获取一行,而从另一个表中获取两行。您可以做两个单独的查询,或使用JOIN语句将两个表连接在一起,然后从结果联接表中接收结果。如果您提供有关表结构的更多信息,我相信可以提供更多帮助。