Php 简单的SQL连接操作
我的数据库结构如下:Php 简单的SQL连接操作,php,mysql,join,Php,Mysql,Join,我的数据库结构如下: Members table |id|username|... Messages table |id|fromId|toId|content 在messages表中,id指的是消息id,在成员中,id指的是用户id(与fromId和toId中的id相同)。我想从消息中执行连接查询,其中id=SOME\u MESSAGE\u id提取以下结果集 |id(message id)|fromId|fromUsername(username that
Members table
|id|username|...
Messages table
|id|fromId|toId|content
在messages表中,id指的是消息id,在成员中,id指的是用户id(与fromId和toId中的id相同)。我想从消息中执行连接查询,其中id=SOME\u MESSAGE\u id提取以下结果集
|id(message id)|fromId|fromUsername(username that corresponds to fromId)|toId|toUsername(username that corresponds to toId)|content
任何帮助都将不胜感激。加入成员表两次,但使用不同的别名:
SELECT
messages.id,
messages.fromId,
from_member.username AS fromUsername,
messages.toId,
to_member.username AS toUsername,
messages.content
FROM messages
JOIN members AS from_member ON from_member.id = message.fromId
JOIN members AS to_member ON to_member.id = message.toId
这个怎么样:
SELECT `Message`.`id`,
`Message`.`fromId`,
`From`.`username` AS `fromUsername`,
`Message`.`toId`,
`To`.`username` AS `toUsername`
`Message`.`content`
FROM `Messages` AS `Message`
LEFT JOIN `Members` AS `From`
ON `From`.`id` = `Message`.`fromId`
LEFT JOIN `Members` AS `To`
ON `To`.`id` = `Message`.`toId`
WHERE `Message`.`id` = 1
有关SELECT查询的更多信息,我不知道您可以加入两次。正是我想要的。有一个向上投票:)只是一个简短的提示,使用
JOIN
将导致查询像内部JOIN
一样运行,并且不会返回缺少一条成员记录的消息。还有一件事,该表的名称为全小写,这可能是一个问题,具体取决于安装数据库服务器软件的操作系统。有些是区分大小写的。没关系,成员记录永远不会丢失。是你的还是左派加入更有效?我还根据情况编辑了这些名字。很好用,谢谢。您的左连接是比上面的双连接更有效,还是同样有效?@user974896-效率不高。唯一真正的区别是左连接将返回NULL
列,而不是完全不返回行。因此,例如,如果您删除一个用户,左连接仍然允许您查看消息,但是用户名
将为NULL
。