9

这个问题的解决方案可能是我的一个简单的看法。

我正在尝试运行在 PHP 中存储为字符串的 MYSQL 查询。该查询使用像 Navicat 这样的 DBM 工具运行良好,但在我的 PHP 开发环境中返回 false。有什么我看过了吗?

SET @running_sum = 0;

SELECT
    TID,
    SumTotal,
    T.`Freight`,
    T.`Insurance`,
    T.`Discount`,
    CONCAT(
        '$',
        FORMAT(
            @running_sum :=@running_sum + SumTotal + T.`Freight` + T.`Insurance` - T.`Discount`,
            2
        )
    ) AS 'Running Total'
FROM
    (
        SELECT
            TID,
            SUM(Quantity * UnitNetValue) AS SumTotal,
            T.`Freight`,
            T.`Insurance`,
            T.`Discount`
        FROM
            Transactions T
        JOIN `Transactions_Products` P ON T.TransactionID = P.TID
        WHERE
            (
                T.TemplateName = ''
                OR T.TemplateName IS NULL
            )
        AND T. STATUS = 1
        GROUP BY
            TransactionID

    ) AS T;

我正在执行这样的查询;

$result = mysql_query($this->query);

$this->query是一个包含上述查询的字符串,正如上面显示的那样。

4

3 回答 3

20

问题是mysql_query()不支持多个查询。你SET @running_sum = 0;被认为是一个单独的查询,所以你必须先执行它:

$result1 = mysql_query("SET @running_sum = 0;");

$result2 = mysql_query($this->query); // <-- without the SET ... query

手册

mysql_query() 发送唯一查询(不支持多个查询)


旁注:该mysql_*库已弃用,建议升级到现代 MySQL 库,例如PDOMySQLi

于 2013-01-23T18:51:02.200 回答
4

也可以使用multi_query方法代替queryMySQLi:

$query = "SET @running_sum = 0; SELECT ...";
$db_link->multi_query($query);
于 2015-11-23T09:24:03.863 回答
2

像这样放置变量。我想它应该工作。

 mysql_query("SELECT @i:=0");
 mysql_query("UPDATE table_name SET id = @i:=@i+1");
于 2013-01-23T18:47:27.650 回答