2017-12-02 96 views
1

好吧,這可能會很簡單,但我已經花了4個小時在這個,我放棄問我失蹤。我正在做一個SQL SELECT語句:在SQL SELECT上添加行號

"SELECT username, id, Days FROM Users ORDER BY Days DESC"; 

很簡單。但是現在,使用這種顯示我所有的數據時:

if ($result->num_rows > 0) { 
echo "<table><tr><th>ID</th><th>Name</th><th>Days</th></tr>"; 
// output data of each row 
while($row = $result->fetch_assoc()) { 
    echo "<tr><td>" . **$row["id"].** "</td><td>" . $row["username"]. "</td><td>" . $row["Days"]. "</td></tr>"; 
} 
echo "</table>"; 
} else { 
echo "0 results"; 
} 

我想第一個替換大膽$row['id']是行號。

我已經嘗試了所有的以下內容:

SELECT *, number = ROW_NUMBER() OVER (ORDER BY Days) FROM Users AS rownumber ORDER BY Days; 


SELECT ROW_NUMBER() OVER (Order by Days) AS 'RowNumber', username FROM Users 

SELECT username, Days, id, ROW_NUMBER() OVER(ORDER BY Days) AS 'RowNumber' FROM Users"; 

^^所有這些事情都是我互聯網上找到。沒有工作。我在這裏錯失了一些明顯的東西嗎?

回答

2

如果您使用的是編程語言,則可以使SQL保持簡單:

"SELECT username, id, Days FROM Users ORDER BY Days DESC"; 

然後再處理使用的編程語言的行號:

if ($result->num_rows > 0) { 
$rowNumber=0; 
echo "<table><tr><th>ID</th><th>Name</th><th>Days</th></tr>"; 
// output data of each row 
while($row = $result->fetch_assoc()) { 
    $rowNumber++; 
    echo "<tr><td>" . $rowNumber "</td><td>" . $row["username"]. "</td><td>" . $row["Days"]. "</td></tr>"; 
} 
echo "</table>"; 
} else { 
echo "0 results"; 
} 
1

MySQL不支持像row_number這樣的分析查詢(窗口函數) - 因爲你必須使用oracle(如果你想從oracle corp中獲得某些東西),它可以。

我不會爲此使用數據庫;修改您的前端代碼以輸出遞增的數字,因爲它將行轉儲爲HTML-這是演示代碼的任務,而不是sql查詢

+0

.....你真是太棒了。是啊。爲什麼我沒有想到這一點,那很容易。大聲笑謝謝你 –

0

可以使用變量。這通常工作:

SELECT (@id := @id + 1) as id, username, Days 
FROM Users u CROSS JOIN 
    (SELECT @id := 0) params 
ORDER BY Days DESC;