gpt4 book ai didi

php - 从 MySQL 过程中获取空结果集

转载 作者:行者123 更新时间:2023-11-29 03:34:06 25 4
gpt4 key购买 nike

我有一个返回多个结果集的 MySQL 存储过程。见下文

` BEGIN                                                                  /**/

SELECT u.user_id,
u.user_name
FROM user u
UNION
SELECT 1,1 FROM DUAL WHERE FALSE;

SELECT g.group_id,
g.group_name
FROM group g
UNION
SELECT 1,1 FROM DUAL WHERE FALSE;

SELECT r.role_id,
r.role_name
FROM role r
UNION
SELECT 1,1 FROM DUAL WHERE FALSE;

END`

在 PHP 中,我按以下方式计算正在处理的结果集

   $rsCount = 1;
do {
$rowset = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($rowset) {
switch ($rsCount) {
case 1: //first resultset
$users = $rowset;
break;
case 2: //second resulset
$groups = $rowset;
break;
case 3: //third resultset
$roles = $rowset;
break;
default:
break;
}
}

$rsCount++;
} while ($stmt->nextRowset());

但是,如果组表为空,则 MySQL 仅返回 2 个结果集,它会抛出我的 PHP 逻辑 - 无论如何强制 MySQL 返回一个空结果集?是否有更好的 PHP 逻辑来处理此问题 - 例如,我可以命名结果集并在 PHP 中检查相同的结果吗?

最佳答案

我可以想象一些技巧:

  • 始终添加一个虚拟行,并始终忽略第一行:
SELECT NULL -- no further condition
UNION ALL
[actual query] ;
  • LEFT JOIN 对虚拟表的实际查询(但不从虚拟表中选择列)。如果实际查询没有结果,结果集包含一行 NULL:
SELECT actualQuery.*
FROM (SELECT NULL) AS dummy
LEFT JOIN ( [actual query] ) AS actualQuery ON TRUE ;

如果 [实际查询] 中的非空列(例如主键)为 NULL,则该行为虚拟行且查询没有结果。

关于php - 从 MySQL 过程中获取空结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25942166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com