0

このクエリをmysqlでテストしたときは問題ありませんでしたが、phpで実行すると、このエラーが発生し続けます。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT *, (@rownum := @rownum + 1) AS rank FROM ( SELECT *, (totalWins+(total' at line 1

これは私が持っているphpコードです。

    <?php

    $sql = "    SET @rownum = 0; ";

    $sql .= "   SELECT *,  (@rownum := @rownum + 1) AS rank FROM ( ";

    $sql .= "       SELECT *, (totalWins+(totalPushs*.5)) AS totalPoints, totalWins+totalLost+totalPushs AS totalBets FROM ( ";

    $sql .= "           SELECT *, SUM(win) AS totalWins, SUM(lost) AS totalLost, SUM(push) AS totalPushs FROM ( ";

    $sql .= "               SELECT *, (finalResult = 'Winner') AS win, (finalResult = 'Loser') AS lost, (finalResult = 'Push') AS push FROM ( ";

    $sql .= "                   SELECT " . $db_prefix . "users.userID, userName, ";
    $sql .= "                   IF (pickID=visitorID, visitorResult, homeResult) AS finalResult ";
    $sql .= "                   FROM " . $db_prefix . "users ";
    $sql .= "                   JOIN " . $db_prefix . "picks ";
    $sql .= "                   ON " . $db_prefix . "users.userID = " . $db_prefix . "picks.userID ";
    $sql .= "                   JOIN " . $db_prefix . "schedule ";
    $sql .= "                   ON " . $db_prefix . "picks.gameID = " . $db_prefix . "schedule.gameID ";

    $sql .= "               ) x ";

    $sql .= "           ) x ";
    $sql .= "           GROUP BY userID ";

    $sql .= "       ) x ";

    $sql .= "   ) x ";
    $sql .= "   ORDER BY totalPoints DESC, totalWins DESC, totalPushs DESC, totalLost ";

    $result = mysql_query($sql) or die(mysql_error());

    while ($row = mysql_fetch_array($result)) {

        echo $row[rank] . '|' . $row[userName]. '|' . $row[totalWins] . '|' . $row[totalLost] . '|' . $row[totalPushs] . '|' . $row[totalPoints];
        echo '<br>';

    }

    ?>

コードの最初の行がなくても php コードを動作させることができます

$sql = " SET @rownum = 0; ";

ただし、ランク列はエコーしません。

コードの 1 つが PHP にある場合、コードの 1 つをライン化するために何か別のことをしなければならないことはありますか?

4

2 に答える 2

0

* の代わりに tablename.* を試してください

于 2013-09-14T14:02:55.963 に答える
0

mysql_query一度に複数のクエリを実行することはサポートされていません。最初に を実行する必要があります
mysql_query("SET @rownum = 0;");その後mysql_query、2 回目の呼び出しで残りのクエリを実行できます。

于 2013-09-14T14:02:02.717 に答える