2012-01-27 51 views
0

我目前有一个页面显示来自一个名为“tblplayers”的表的玩家信息。我目前使用的查询是:如何为两个相关表创建MYSQL记录源

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

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

我如何修改我的$结果查询,以便它返回:从tblPlayers

  • 一行
  • 从tblMatches

多行???

感谢您的帮助。

回答

5

这就是所谓的一个“加入”:

​​3210
+0

谢谢Marc。这是如何写在PHP? – DoubleA 2012-01-27 20:19:51

+0

PHP独立于SQL。你会在PHP字符串中嵌入sql查询。即$ sql =“SELECT ...”; $ query = mysql_query($ sql,$ db); – dar7yl 2012-01-27 20:23:26

+0

不,这只是原始的查询字符串。你在mysql_query()调用中放入了什么。 – 2012-01-27 20:23:52

0

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

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。)
+0

请注意,Marc B提出了更好的JOIN语法,我会推荐使用它。 – JYelton 2012-01-27 20:24:40

+0

我同意马克有一个更好的语法,虽然为解释的目的,我发现这个答案是更彻底的解释。我不仅知道实际上理解左连接原则,而且我也有指导原则。谢谢!! – HenryGuy 2012-01-27 20:38:13