表中的单行SELECT索引

时间:2012-10-20 15:00:52

标签: mysql select indexing

我有一个存储团队的MYSQL表。

表格结构:
CREATE TABLE teams ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(28) COLLATE utf8_unicode_ci NOT NULL, UNIQUE KEY id (id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;

示例数据:
INSERT INTO {队{1}}

使用:
VALUES (1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five');
返回正确的rowNumber,因为表中实际上有三行。但这只有在我不删除一行时才有效。

示例:
我想说我SELECT id, name, id as rowNumber FROM teams WHERE id = 4
当我现在使用DELETE FROM teams WHERE id = 3;时,结果是错误的,因为现在表格中只有两行(id的1& 2)。

如何从一个特定行获取id排序的“真实”行号/索引?

3 个答案:

答案 0 :(得分:2)

这不是一个好方法,但使用简单的SQL:

SELECT
    t.id,
    t.name,
    (SELECT COUNT(*)+1 FROM teams WHERE id < t.id) as row_number
FROM teams t
WHERE t.id = 4

答案 1 :(得分:1)

您将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;

答案 2 :(得分:0)

为什么要在持久层内部打扰行索引?

如果你真的需要依赖存储的tupples的“索引”,你可以引入一个变量并在每行的查询/程序代码中递增它。

编辑: 刚发现一个:: With MySQL, how can I generate a column containing the record index in a table?