group-by-php查询

jgwigjjp  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(295)

你好,mysql上的group by正在工作,但是php查询上我没有工作。
如果我把groupby从php中删除,这是可行的,但是我没有得到正确的结果。
mysql数据库

SELECT _o.Ora,_u.Fname,_u.Sname,_u.Phone,_o.Name1,_o.Name2,_o.Name3,_o.Name4,_o.Name5,_o.Name6,_o.PaymentType,_o.FinalPrice
                FROM _orders as _o,_users as _u WHERE _o.ShopName='ISAAK' AND _o.HmerominiaParagelias='13/12/2018' AND _o.UserID=_u.Username 
                GROUP BY _o.OraParagelias IN (SELECT MAX(OraParagelias) FROM _orders) ORDER BY _o.Ora DESC;

结果

php代码:

<?php

    include_once 'connect.php';

    $ShopName= $_POST['ShopName'];
    $HmerominiaParagelias= $_POST['HmerominiaParagelias'];

    $sql = "SELECT _o.Ora,_u.Fname,_u.Sname,_u.Phone,_o.Name1,_o.Name2,_o.Name3,_o.Name4,_o.Name5,_o.Name6,_o.PaymentType,_o.FinalPrice
                FROM _orders as _o,_users as _u WHERE _o.ShopName='$ShopName' AND _o.HmerominiaParagelias='$HmerominiaParagelias' AND _o.UserID=_u.Username 
                GROUP BY _o.OraParagelias IN (SELECT MAX(OraParagelias) FROM _orders) ORDER BY _o.Ora DESC";

    $result = $dbcon->query($sql);

    if($result->num_rows> 0) {
        while ($row = $result->fetch_assoc()){
            echo "\nΏρα: ".$row["Ora"]."\nΌνομα: ".$row["Fname"]."\nΕπώνυμο: ".$row["Sname"]."\nΤηλ.: ".$row["Phone"]."\n".$row["Name1"]."\n".$row["Name2"]."\n".
                    $row["Name3"]."\n".$row["Name4"]."\n".$row["Name5"]."\n".$row["Name6"]."\nΤρόπος Πλήρ.: ".$row["PaymentType"]."\nΤελικό Ποσό: ".$row["FinalPrice"].
                    "€?";
        }
    } else{
        echo "no_orders_found?";
    }

?>

[![在此处输入图像描述]
结果:没有找到订单
关于如何在php上修复groupby有什么解决方案吗?

1cosmwyk

1cosmwyk1#

考虑使用显式 JOIN 在table之间。具体地说,在聚合查询上连接,将用户单元级数据连接到它们对应的最大值,以返回两个以上的用户。下面假设userid是用于连接的唯一值(根据需要进行调整)。
查询运行差异的原因可能是phpdbiapi(mysqli、pdo等)不允许奇怪的(更新的?) GROUP BY ... IN() 而mysql workbench显然是这样做的,可能是打开了特定的设置。

SELECT _o.Ora, _u.Fname, _u.Sname, _u.Phone, _o.Name1, _o.Name2, _o.Name3, 
       _o.Name4, _o.Name5, _o.Name6, _o.PaymentType, _o.FinalPrice
FROM _orders as _o,
INNER JOIN _users as _u 
   ON _o.UserID = _u.Username 
INNER JOIN
   (SELECT UserID, MAX(OraParagelias) AS Max_OraParagelias
    FROM _orders 
    GROUP BY userID
   ) AS m
  ON _o.userID = m.userID AND _o.OraParagelias = m.Max_OraParagelias
WHERE _o.ShopName = 'ISAAK' 
  AND _o.HmerominiaParagelias = '13/12/2018' 
ORDER BY _o.Ora DESC;

rextester演示(使用示例数据)

相关问题