Php 选择表a中需要表B中信息的列的最简单方法?
我有两张桌子: 表A存储用户信息: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
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