MYSQL-GROUP BY-PHP查询

时间:2018-12-20 16:19:54

标签: php mysql

您好,MYSQL上的分组工作正常,但在PHP查询上却行不通。

如果我从PHP删除Group By可以正常工作,但是我没有得到正确的结果。

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;

结果

enter image description here

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?";
    }

?>

[![在此处输入图片描述]

结果,我认为:no_orders_found

任何有关如何在php上修复分组依据的解决方案?

1 个答案:

答案 0 :(得分:1)

在表之间使用显式JOIN来考虑符合标准的ANSI SQL查询。具体来说,联接聚合查询以将用户单位级别的数据连接到其相应的最大值以返回两个以上的用户。下面假设 UserID 是用于加入的唯一值(根据需要进行调整)。

同样,查询运行不同的原因是PHP DBI-API(mysqli,pdo等)不允许使用奇怪的(较新的版本)GROUP BY ... IN(),而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,
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 Demo (使用示例数据)