我已经查看过十几篇关于不使用PHP的查询的帖子,但他们都无法解决我的问题 - 希望这很简单!
我在这里尝试做的是" rank"这些行基于他们的年度总销售量,到目前为止工作得很好。当我在MySQL中运行我的查询时,它运行正常 - 我得到了数百个结果。
SET @row_number := 0;
SELECT @row_number := @row_number + 1 AS row_number,
TotalRevenue,
CompanyID
FROM (
SELECT CompanyID,
SUM(Sales_Amt) AS TotalRevenue
FROM Sales,
(SELECT @row_number := 0) r
GROUP BY CompanyID
) t
WHERE TotalRevenue > 0
ORDER BY TotalRevenue DESC
产地:
row_number | TotalRevenue | CompanyID
-----------+--------------+----------
1 | 81130.00 | 333
2 | 72234.00 | 876
3 | 62653.00 | 123
4 | 54408.40 | 999
5 | 44548.00 | 111
然而,当我通过PHP运行它时,我收回错误:
您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在' SELECT @row_number:= @row_number + 1 AS row_number附近使用正确的语法, TotalRevenue'在第2行
根据此处的其他帖子,我尝试过:
这是我的PHP代码,如果你也需要它:
$query = "SET @row_number := 0;
SELECT @row_number := @row_number + 1 AS `row_number`,
TotalRevenue,
CompanyID
FROM (
SELECT CompanyID,
SUM(`Sales_Amt`) AS TotalRevenue
FROM Sales
GROUP BY CompanyID
) t
WHERE TotalRevenue > 0
ORDER BY TotalRevenue DESC";
if (!$result = $mysqli->query($query))
{
print_r($mysqli->error);
}
希望这会非常简单,我只是没有看到。
谢谢!
答案 0 :(得分:0)
除了S. Dev的答案之外,要添加其他选项,您可以使用mysqli multi query;
$query = "SET @row_number := 0;
SELECT @row_number := @row_number + 1 AS `row_number`,
TotalRevenue,
CompanyID
FROM (
SELECT CompanyID,
SUM(`Sales_Amt`) AS TotalRevenue
FROM Sales
GROUP BY CompanyID
) t
WHERE TotalRevenue > 0
ORDER BY TotalRevenue DESC";
if (!$result = $mysqli->multi_query($query))
{
print_r($mysqli->error);
}
这将允许您一次预先形成多个查询,并将其全部保存在查询的相同范围内
它也使用稍微减少的开销,因为你只进行(技术上)1个查询,因为只有1个连接而不是2个单独的调用
值得查看存储过程以使其不必设置变量,而是将它们传递给查询本身