mysql - 表中单行的SELECT索引

标签 mysql select indexing

我有一个存储团队的 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/

相关文章:

php - 发送 STMT_PREPARE 数据包时出错。 PID=2

mysql存储过程异常: One line gets executed,又跳过了?

mysql - 如果列为空,则返回特定字符串的 SQL 查询?

mysql - 使用 JOIN 从一个选择语句中的同一列(可能不同的行)中选择

JPA:定义索引列

php - 我可以在 PHP 中混合使用 MySQL API 吗?

mysql - 修改FTP密码的脚本

sql - 一个简单的 SQL Select 查询来抓取社交图中所有关联的人?

python - 对大量文件进行近乎重复检查的最佳方法或算法?

mysql - 在时间戳上创建索引以优化查询