如何解决UNION ALL与INNER JOIN一起使用
我正在尝试使用UNION ALL连接3个表。我尝试了以下代码。并给出以下错误的参数编号错误:绑定变量的数量与令牌的数量不匹配。
$codeArray = explode(',',$code);
$inQuery = implode(',array_fill(0,count($codeArray),'?'));
$full_dt = date('Y-m-d H:i:s');
$query = "SELECT * FROM
(
SELECT
a.*
FROM pat_info a
INNER JOIN
pat_medication b
ON a.id = b.pat_id
WHERE
a.status != 2 AND b.status != 2
AND '$full_dt' BETWEEN b.start_date AND b.end_date
AND a.location_code IN ($inQuery)
AND b.stock_status != '2'
AND (b.total_qty - (b.given + b.not_taken)) < 12
UNION ALL
SELECT
a.*
FROM pat_info a
INNER JOIN
prn_medication b
ON a.id = b.pat_id
WHERE
a.status != 2 AND b.status != 2
AND '$full_dt' BETWEEN b.start_date AND b.end_date
AND a.location_code IN ($inQuery)
AND b.stock_status != '2'
AND (b.total_qty - (b.given + b.not_taken)) < 12
) x
GROUP BY a.id ORDER BY a.id DESC";
$statement = $con->prepare($query);
$statement->execute($codeArray);
解决方法
由于两次在代码中使用了in
子句,因此需要将值绑定两次。
一种简单的方法是在execute()
...
$codeArray = array_merge($codeArray,$codeArray);
您还需要更改
GROUP BY a.id ORDER BY a.id DESC
到
GROUP BY x.id ORDER BY x.id DESC
作为a
别名位于子选择中,而不是整个SELECT。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。