您好,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;
结果
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上修复分组依据的解决方案?
答案 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 (使用示例数据)