我有一个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中检查相同吗?
答案 0 :(得分:0)
我可以想象一些技巧:
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 ;
如果来自[actual query]
的非空列(例如主键)为NULL
,则该行为哑,且查询没有结果。