【问题标题】:How to create MYSQL record source for two related tables如何为两个相关表创建MYSQL记录源
【发布时间】:2012-01-27 20:13:28
【问题描述】:

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

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

我有另一个名为“tblMatches”的表格,其中包含玩家的比赛结果。我希望记录集包含“tblMatches”中的行,其中“P1_ID”或“P2_ID”等于“tblPlayers”中的“lng_RecordID_PK”字段。

如何修改我的 $result 查询以使其返回:

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

???

感谢您帮助我。

【问题讨论】:

    标签: php mysql join filter


    【解决方案1】:

    这就是所谓的“加入”:

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

    【讨论】:

    • 谢谢马克。 php是这样写的吗?
    • PHP 独立于 SQL。您可以将 sql 查询嵌入到 PHP 字符串中。即 $sql = "SELECT ..."; $query=mysql_query($sql, $db);
    • 不,这只是原始查询字符串。您将在 mysql_query() 调用中放入的内容。
    • 这是一个很好的例子,帮助我理解了联接。投票赞成。
    【解决方案2】:

    您正在询问连接两个表,其中第二个表可能在第一个表中具有多个记录。这是一对多或 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。)

    【讨论】:

    • 请注意,Marc B 提出了更好的 JOIN 语法,我建议使用它。
    • 我同意 Marc 的语法更好,但出于解释目的,我发现这个答案在解释方面要彻底得多。我不仅知道真正理解左连接原则,而且我也有指导方针。谢谢!!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多