行排序查询在mysql中工作,但在php中不工作

mwyxok5s  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(321)

这个问题在这里已经有了答案

mysqli不允许多个查询(1个答案)
两年前关门了。
我已经看了十几篇关于在php中不起作用的查询的文章,但是它们都不能解决我的问题——希望这是一个简单的问题!
我在这里试图做的是根据每年的总销售额对这些行进行“排名”,到目前为止效果相当不错。当我在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语法有错误;在第2行的“select@row\u number:=@row\u number+1 as row\u number,totalrevenue”附近,检查与您的mysql服务器版本对应的手册中使用的正确语法
根据这里的其他帖子,我尝试过:
在我的列名周围添加``
在我的列名周围添加“”
在我创建@row\u number时添加:=而不是=
确认在php中的查询之后添加了所有空格,以便关键字不会挤在一起
将mysqli->charset设置为utf-8
以下是我的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);
}

希望这将是一个非常简单的东西,我只是没有看到。
谢谢!

hl0ma9xz

hl0ma9xz1#

除了s之外再加一个选项。dev的答案,可以用mysqli多查询;

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

这将允许您一次执行一个以上的查询,将所有查询保持在查询的同一范围内
它使用的开销也稍微少一些,因为从技术上讲,您只需要执行一个查询,因为只有一个连接,而不是两个单独的调用
有必要研究存储过程,这样就不必设置变量,而是将它们传递到查询本身

相关问题