我有一个存储团队的 MYSQL 表。
表结构:
CREATE TABLE 团队(
id int(11) NOT NULL AUTO_INCREMENT,
名称 varchar(28) 整理 utf8_unicode_ci NOT NULL,
唯一键 id (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;
示例数据:
INSERT INTO
团队VALUES
(1, '一'),
(2, '二'),
(3, '三'),
(4, '四'),
(5, '五');
使用:
SELECT id, name, id as rowNumber FROM teams WHERE id = 4
返回正确的 rowNumber,因为在表中它前面确实有三行。但这仅在我不删除行时有效。
示例:
假设我DELETE FROM teams WHERE id = 3;
当我现在使用 SELECT id, name, id as rowNumber FROM teams WHERE id = 4
时,结果是错误的,因为现在表中它前面只有两行(id 的 1 和 2)。
如何从一个特定行中获取按 id 排序的“真实”行号/索引?
最佳答案
您正在将 ID
转换为 rowNumber
,因此它只是返回 ID
列值。为什么您认为它会有所不同?
我认为您可能想要定义和 @curRow
变量来获取行号并使用如下子查询:
SELECT * from
(SELECT ID,
NAME,
@curRow := @curRow + 1 AS rowNumber
FROM Teams t
JOIN (SELECT @curRow := 0) curr
ORDER by t.ID asc) as ordered_team
WHERE ordered_team.id = 4;
关于mysql - 表中单行的SELECT索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12989688/