2016-06-27 54 views
0

我有這個真正基本的SQL代碼,我已經複製了哪些排名10人的分數,它似乎在phpmyadmin網站上工作正常,雖然在我的網站上它返回此消息:SQLSTATE [HY000]:一般錯誤sql結果顯示在phpmyadmin,但不會將記錄返回到我的網站

我的猜測是出現此消息是因爲SET函數不允許返回記錄。

所以我的解決方案是改變我複製的SQL代碼做同樣的事情,但寫在我的網站上工作不同。

Click here to see the SQL code in phpMyAdmin

我知道很多你會被要求在PHP代碼所以在這兒呢。

$servername = "mysql12.000webhost.com"; 
$username = "corey"; 
$password = "pass"; 
$dbname = "database"; 
$sql = "SQL CODE PLACED HERE. PASTED BELOW"; 
try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$stmt = $conn->prepare($sql); 
$stmt->execute(); 

$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
    $rows = new RecursiveArrayIterator($stmt->fetchAll()); 
    echo json_encode($rows); 
} 
catch(PDOException $e){ 
    echo "Error: " . $e->getMessage(); 
} 
$conn = null; 

和SQL代碼在這裏:


    SET @count =0; 
    SELECT * 
    FROM (SELECT * , @count := @count +1 AS rank 
    FROM montsbattlefront 
    WHERE RacesWon >=0 
    ORDER BY RacesWon DESC 
    ) AS t 
    WHERE rank 
    BETWEEN 0 
    AND 100000 

的PHP代碼工作完全正常。 SQL代碼是我遇到的最多問題。 我嘗試用其他類似BEGIN END的SET替換SET,以允許本地變量和SET的使用,儘管這僅僅打開了比以前更多的問題,因爲phpmyadmin並未真正支持DELIMITER。有人知道一個簡單的解決方案來編寫簡單的SQL代碼來做我想做的事嗎?我不是SQL專家,我只知道基礎知識。

例如,由於某些原因,我可以使用COUNT()或ROW_NUMBER()來代替使​​用@count,ROW_NUMBER也不能與phpmyadmin一起使用。如果任何人都能找到解決我的基本問題的辦法,我會非常高興。

問候,

科瑞S.

回答

0

嘗試取出set語句,然後你可以在一個子查詢初始化user-defined variable代替:

SELECT * 
FROM (
    SELECT * , @count := @count +1 AS rank 
    FROM montsbattlefront, (SELECT @count := 0) t 
    WHERE RacesWon >=0 
    ORDER BY RacesWon DESC 
) AS t 
WHERE rank BETWEEN 0 AND 100000 
+0

太感謝你了!是!好吧,這太棒了。刪除SET並將此行編輯爲FROM montsbattlefront,(SELECT @count:= 0)t就完成了。 –

相關問題