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);


达令说
浏览 93回答 1
1回答

Helenr

由于代码中存在in两次该子句,因此需要将值绑定两次。execute()执行此操作的一个简单方法是在...之前复制数据。$codeArray&nbsp;=&nbsp;array_merge($codeArray,&nbsp;$codeArray);你还需要改变GROUP&nbsp;BY&nbsp;a.id&nbsp;ORDER&nbsp;BY&nbsp;a.id&nbsp;DESC到GROUP&nbsp;BY&nbsp;x.id&nbsp;ORDER&nbsp;BY&nbsp;x.id&nbsp;DESC因为a别名位于子选择中,而不是整个选择中。
打开App,查看更多内容
随时随地看视频慕课网APP