PHP multiQuery问题

时间:2015-09-19 11:13:29

标签: php mysql sql

我在使用PHP进行多次查询方面遇到了一些问题。我的数据库有以下表格,其架构如下所示:

第一个表 - 用户

(PK) UserID,
UserFullName

UserID      FullName

1000        Arthur Whitney

 2000       Alex Schwartz

 3000       Eva Kilpatrick

第二张表 - 邀请

(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

例如,当用户Alex Schwartz(具有唯一ID 2000)登录时,我想让他能够看到邀请的名称,邀请发件人的姓名(如果他是邀请接收者),邀请收件人的姓名(如果他是邀请发件人)以及邀请发件人和收件人的总数。

我设计了以下两个查询,这些查询产生了我想要的结果:

QUERY1

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发送邀请时,这会显示Invite Name,Invite Sender和Receivers的总数以及Invite Receiver的名字。此处的预期输出将是行ID 2和3的具体细节。

以下查询显示了反向:

QUERY2

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并试图实现这一点,但也没有取得多大成功。

先谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

为什么不使用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

答案 1 :(得分:0)

作为备注,您可以在不sys.stdin.read()的情况下执行此操作(除非您有意删除重复项,否则优先于import sys data = sys.stdin.read() data_list = data.strip().split('\n') ):

union all