Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP多查询问题_Php_Mysql_Sql - Fatal编程技术网

PHP多查询问题

PHP多查询问题,php,mysql,sql,Php,Mysql,Sql,关于使用PHP进行多查询,我遇到了一些问题。我的数据库有以下表格,其架构如下所示: 第一个表-用户 (PK) UserID, UserFullName UserID FullName 1000 Arthur Whitney 2000 Alex Schwartz 3000 Eva Kilpatrick 第二桌-邀请 (PK) RowID, InvName, InvSender, InvSenderTotal, InvReceiver,

关于使用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)登录时,我希望他能够看到邀请的名称、邀请发送者的名称(如果他是邀请接收者)、邀请接收者的名称(如果他是邀请发送者)以及邀请发送者和接收者的总数

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

问题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中出现了一些问题,似乎只执行一个查询。所以我的问题是,有人知道我如何将这两个查询组合成一个查询吗?我也知道多重查询,并尝试过实现它,但在这方面也没有太大的成功


提前感谢您的帮助。

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

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

请注意,您可以在不使用
union all
的情况下执行此操作(这比
union
更可取,除非您有意删除重复项):


请注意,您可以在不使用
union all
的情况下执行此操作(这比
union
更可取,除非您有意删除重复项):


实际上似乎有必要解决的问题是,为什么在PHP中运行两个SELECT查询时会出现问题?我自己并不确定。每当我在PHP中运行这两个查询时,似乎只有第一个查询成功完成。我甚至在phpMyAdmin中运行了查询,并确定第二个查询得到了我需要的数据。这就是为什么我昨天简要地研究了multiQuery函数。实际上似乎有必要解决的问题是,为什么在PHP中运行两个SELECT查询时会出现问题?我自己也不确定。每当我在PHP中运行这两个查询时,似乎只有第一个查询成功完成。我甚至在phpMyAdmin中运行了查询,并确定第二个查询得到了我需要的数据。这就是为什么我昨天简要地研究了multiQuery函数。说得好!我已经忘记了那个功能。感谢您的编辑和帮助。@感谢您的帮助很高兴能提供帮助。很好!我已经忘记了那个功能。感谢您的编辑和帮助。@感谢您的帮助很高兴能提供帮助。