2
我有一个MySQL存储过程返回多个结果集。见下面从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中检查相同的结果吗?
如果没有干净的做法,你总是可以将所有固定行联合到查询上,然后在PHP中忽略它。 – Laurence 2014-09-19 20:57:03
我想基于其他反馈,但这不工作以及 - 'SELECT group_id FROM组UNION SELECT 1 FROM WHERE FALSE' - 是否有一些地方根据前一个查询返回的行数选择1? – ChicagoSky 2014-09-20 00:34:29
您可以将存储过程添加到帖子中。 – Bulat 2014-09-20 00:42:01