我在使用 PHP 进行多重查询时遇到了一些问题。我的数据库有下表,其架构如下所示:
第一个表 - 用户
(PK) UserID,
UserFullName
UserID FullName
1000 Arthur Whitney
2000 Alex Schwartz
3000 Eva Kilpatrick
第二张 table - 邀请
(PK) RowID,
InvName, InvSender, InvSenderTotal, InvReceiver, InvReceiverTotal, InvStatus
RowID InvName InvSenderID InvSenderTotal InvReceiverID InvReceiverTotal InvStatus
1 Fair 1000 10 2000 10 Sent
2 Party 2000 45 1000 45 Sent
3 Cinema 2000 12 1000 12 Sent
4 Vacation 3000 15 1000 5 Expired
例如,当具有唯一 ID 2000 的用户 Alex Schwartz 登录时,我希望他可以看到邀请的名称、邀请发送者的姓名(如果他是邀请接收者)、邀请接收者的姓名(如果他是邀请发送者)以及邀请发送者和接收者的总数。
我设计了以下两个查询,它们产生了我想要的结果:
查询1
select i.InvName, i.InvSenderTotal, i.InvReceiverTotal, u.FullName FROM Invites as i INNER JOIN Users as u ON u.UserID = i.InvReceiverID
WHERE i.InvStatus = 'Sent' AND i.InvSenderID = 2000
这显示了 Alex Schwartz 发送邀请时的邀请名称、邀请发送者和接收者的总数以及邀请接收者的姓名。此处的预期输出将是行 ID 2 和 3 的具体细节。
下面的查询显示了相反的结果:
查询2
select i.InvName, i.InvSenderTotal, i.InvReceiverTotal, u.FullName FROM Invites as i INNER JOIN Users as u ON u.UserID = i.InvSenderID
WHERE i.InvStatus = 'Sent' AND i.InvReceiverID = 2000
因此,这使 Alex Schwartz 能够看到发送邀请的人的姓名以及相同的数据。此处的预期输出将是行 ID 1 的具体细节。
因此,我能够获得我想要的数据,但我需要两个不同的查询才能获得它。这在 PHP 中提出了问题,似乎只有一个查询执行。所以我的问题本质上是,有谁知道我如何将这两个查询合二为一?我也知道 multiQuerying 并尝试实现它,但也没有取得太大的成功。
提前感谢您的帮助。
最佳答案
为什么不使用UNION
。
select i.InvName, i.InvSenderTotal, i.InvReceiverTotal, u.FullName FROM Invites as i INNER JOIN Users as u ON u.UserID = i.InvReceiverID
WHERE i.InvStatus = 'Sent' AND i.InvSenderID = 2000
UNION
select i.InvName, i.InvSenderTotal, i.InvReceiverTotal, u.FullName FROM Invites as i INNER JOIN Users as u ON u.UserID = i.InvSenderID
WHERE i.InvStatus = 'Sent' AND i.InvReceiverID = 2000
关于PHP 多查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32667512/