使用 mySQL 内置运算符时出错


Error using mySQL build in operators

我正在使用MySQL内置运算符来获取运行总计,当我在phpMyAdmin中运行时,查询运行良好,但是在php中运行它不起作用,我只是收到"无法执行查询"消息。

我的数据库连接工作正常,因此我可以在 php 中执行此操作,还是有其他方法可以使其工作?

这是脚本:

include("../../include/xxx.inc");
$cxn = mysqli_connect($host,$user,$password,$dbname);
$query = "SET @runtot:=0;
            SELECT `q1`.`c`, (@runtot := @runtot + `q1`.`c`) AS rt
            FROM (
                SELECT SUM( `sr`.`sr_qty` * `st`.`st_ton` ) AS c, `sr`.`sr_no` 
                FROM `sr` 
                JOIN `st` ON `sr`.`st_code` = `st`.`st_code` 
                WHERE `sr`.`sr_date` BETWEEN '2015-01-15' AND '2015-02-15'
                GROUP BY `sr`.`sr_no` 
                ORDER BY `sr`.`sr_no`) AS q1";
$result = mysqli_query($cxn,$query)
    or die ("Couldn't execute query.");
while($row = mysqli_fetch_assoc($result))
{
    extract($row);
    echo "$rt Ton"; 

尝试在查询中设置变量,以便只有一个语句:

        SELECT `q1`.`c`, (@runtot := @runtot + `q1`.`c`) AS rt
        FROM (
            SELECT SUM( `sr`.`sr_qty` * `st`.`st_ton` ) AS c, `sr`.`sr_no` 
            FROM (SELECT @runtst := 0) vars cross join
                 `sr` 
            JOIN `st` ON `sr`.`st_code` = `st`.`st_code` 
            WHERE `sr`.`sr_date` BETWEEN '2015-01-15' AND '2015-02-15'
            GROUP BY `sr`.`sr_no` 
            ORDER BY `sr`.`sr_no`) AS q1
我不

完全确定,但我认为这都是你的

我会做SELECT 'q2.c', (@等等。

同样,我可能是错的,但这是值得尝试的。

不能使用 mysqli_query 运行多个查询。您需要为每个查询单独调用它:

$query1 = "SET @runtot:=0"
$query2 = "SELECT `q1`.`c`, (@runtot := @runtot + `q1`.`c`) AS rt
            FROM (
                SELECT SUM( `sr`.`sr_qty` * `st`.`st_ton` ) AS c, `sr`.`sr_no` 
                FROM `sr` 
                JOIN `st` ON `sr`.`st_code` = `st`.`st_code` 
                WHERE `sr`.`sr_date` BETWEEN '2015-01-15' AND '2015-02-15'
                GROUP BY `sr`.`sr_no` 
                ORDER BY `sr`.`sr_no`) AS q1";
mysqli_query($query1);
$result = mysqli_query($query2);

您还可以将变量初始化放入子查询中:

$query = "SELECT `q1`.`c`, (@runtot := @runtot + `q1`.`c`) AS rt
            FROM (
                SELECT SUM( `sr`.`sr_qty` * `st`.`st_ton` ) AS c, `sr`.`sr_no` 
                FROM `sr` 
                JOIN `st` ON `sr`.`st_code` = `st`.`st_code` 
                WHERE `sr`.`sr_date` BETWEEN '2015-01-15' AND '2015-02-15'
                GROUP BY `sr`.`sr_no` 
                ORDER BY `sr`.`sr_no`) AS q1
            CROSS JOIN (SELECT @runtot := 0) AS init";

mysqli也有 mysqli_multi_query ,它允许运行多个查询,但我见过太多人遇到问题而无法推荐它。恕我直言,它很少需要。