在 SQL SELECT 上添加行号
Adding Row Number on SQL SELECT
好吧,这可能会非常简单,但我已经花了 4 个小时在这上面,我放弃去问我遗漏了什么。我正在做一个 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";
^^ 都是我在网上找的东西。 None 成功了。我在这里是否遗漏了一些显而易见的东西?
MySQL 不支持像 row_number 这样的分析查询(window 函数)——因为你必须使用 oracle(如果你想要来自 oracle corp 的东西)。
我不会为此使用数据库;修改您的前端代码以在将行转储到 HTML 时输出递增的数字 - 这是表示代码的任务,而不是 sql 查询
如果您使用编程语言,您可以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";
}
您可以使用变量。这通常有效:
SELECT (@id := @id + 1) as id, username, Days
FROM Users u CROSS JOIN
(SELECT @id := 0) params
ORDER BY Days DESC;
好吧,这可能会非常简单,但我已经花了 4 个小时在这上面,我放弃去问我遗漏了什么。我正在做一个 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";
^^ 都是我在网上找的东西。 None 成功了。我在这里是否遗漏了一些显而易见的东西?
MySQL 不支持像 row_number 这样的分析查询(window 函数)——因为你必须使用 oracle(如果你想要来自 oracle corp 的东西)。
我不会为此使用数据库;修改您的前端代码以在将行转储到 HTML 时输出递增的数字 - 这是表示代码的任务,而不是 sql 查询
如果您使用编程语言,您可以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";
}
您可以使用变量。这通常有效:
SELECT (@id := @id + 1) as id, username, Days
FROM Users u CROSS JOIN
(SELECT @id := 0) params
ORDER BY Days DESC;