Php 选择表a中需要表B中信息的列的最简单方法?

Php 选择表a中需要表B中信息的列的最简单方法?,php,mysql,sql,database,Php,Mysql,Sql,Database,我有两张桌子: 表A存储用户信息: Name | Sex | Location | Other | User | ID 表B存储私人消息和该消息的发送者、接收者: 消息内容|发送方|接收方|消息ID 现在给定一个用户(接收者)名称,我想获得消息内容和发送者的名称,是否可以在一个简单的查询中完成 下面的我的代码只能获取邮件内容,而不能获取发件人的姓名: $result = mysql_query("SELECT PersonalMsg.content FROM PersonalMsg INNER

我有两张桌子:

表A存储用户信息:

Name | Sex | Location | Other | User | ID

表B存储私人消息和该消息的发送者、接收者:

消息内容|发送方|接收方|消息ID

现在给定一个用户(接收者)名称,我想获得消息内容和发送者的名称,是否可以在一个简单的查询中完成

下面的我的代码只能获取邮件内容,而不能获取发件人的姓名:

$result = mysql_query("SELECT PersonalMsg.content FROM PersonalMsg 
INNER JOIN UserDB ON UserDB.User_ID=PersonalMsg.Receiver_ID 
WHERE UserDB.Name = '$userName'"); 

顺便说一句,我刚刚开始表B,请让我知道,如果这个表的设计是坏的,我在设计数据库的经验很少。提前谢谢

可以,只需添加另一个连接即可:

从PersonalMsg中选择PersonalMsg.content、u2.Name
UserDB.User\u ID=PersonalMsg.Receiver\u ID上的内部联接UserDB u1
UserDB.User\u ID=PersonalMsg.Sender\u ID上的内部联接UserDB u2
其中u1.Name='$userName'

有两件事你真的应该改变:

  • 停止使用mysql\u query()(改用)
  • 用于缓解sql注入攻击

再次加入
发送者ID
上的
UserDB

比如:

SELECT p.Message_content, u2.Name FROM PersonalMsg p
LEFT JOIN UserDB u1 ON u1.User_ID=p.Receiver_ID
LEFT JOIN UserDB u2 ON u2.User_ID=p.Sender_ID
WHERE u1.Name = '$userName'

在数据库设计中,必须使用表B中的主表A。然后使用

$resutl = "select a.name,b.Message_content from Table-A as a, Table-B as b where a.User_ID = b.User_ID";

加入用户表两次,一次用于接收方,另一次用于发送方。您可以(/将需要)为每个实例分配表别名,如
发送方
接收方
,以明确哪个是哪个。您必须在数据库设计中使用表B中的表A主。@Shahbaz是的,表A中的用户ID是主用户ID。所以这是正确的方法,对吗?是的,你也必须把它作为外键包含在表B中,看我的答案。你的答案看起来很简洁,但它是完整的解决方案吗?我不太明白,我只提供接收人的姓名。什么是b.User_ID?您必须将其作为外键包含在表b中才能从bot表中获取数据,这是设计数据库的正确方法。Sry我仍然很困惑。。。我不是已经在
消息内容|发送者| ID |接收者| ID |消息| ID