当前位置: 首页 > 面试题库 >

MySQL:如何获取行的序号?

司徒博容
2023-03-14
问题内容

如何编号最低ID为#1而最高ID为#numberOfResults的结果

示例:如果我有一个仅包含3行的表。其ID为24、87、112的ID会像这样拉:

ID  24  87  112
Num 1   2   3

我想要这个的原因是,我的经理希望项目编号为item1,item2等。我最初是这样做的,所以它使用了ID,但他看到的项目就像item24,item87,item112。他一点都不喜欢它,希望它们像item1,item2,item3。我个人认为这将导致问题,因为如果您要删除和添加项目,则item2不会总是引用相同的内容,并且可能会给用户造成混乱。因此,如果有人有更好的主意,我想听听。

谢谢。


问题答案:

如果数字将用于除带数字的项目的简单有序显示之外的其他任何内容,则我同意
使用这样的编号方案的评论。如果数字实际上要与某物联系在一起,那么这是一个非常糟糕的主意!

使用一个变量,并在SELECT语句中增加它:

SELECT
    id,
    (@row:=@row+1) AS row
FROM table,
(SELECT @row:=0) AS row_count;

例子:

CREATE TABLE `table1` (
    `id` int(11) NOT NULL auto_increment,
    PRIMARY KEY  (`id`)
) ENGINE=InnoDB

INSERT INTO table1 VALUES (24), (87), (112);

SELECT
    id,
    (@row:=@row+1) AS row
FROM table1,
(SELECT @row:=0) AS row_count;

+-----+------+
| id  | row  |
+-----+------+
|  24 |    1 |
|  87 |    2 |
| 112 |    3 |
+-----+------+

怎么运行的

@row用户定义的变量。必须在主SELECT语句运行之前将其设置为零。可以这样完成:

SELECT @row:=0;

或像这样:

SET @row:=0

但是将这两个语句结合在一起很方便。这可以通过创建派生表来完成,这是在这里发生的:

FROM table,
(SELECT @row:=0) AS row_count;

第二个SELECT实际上首先运行。一旦完成,这只是增加@row检索到的每一行的值的一种情况:

@row:=@row+1

@row每次检索行时,该值都会增加。无论访问行的顺序如何,它始终会生成一个顺序的数字列表。因此,对某些事情来说很方便,而对其他事情来说很危险…



 类似资料:
  • 问题内容: 我想获取不同idfeedback的行ID 结果 所需结果 问题答案: 试试这个:

  • 问题内容: 默认情况下,MySQL ResultSets会从服务器上完全检索,然后才能完成任何工作。在巨大的结果集的情况下,这变得不可用。我实际上想从服务器一个接一个地检索行。 在Java中,按照此处的说明(在“ ResultSet”下),我创建如下语句: 这在Java中效果很好。我的问题是:有没有办法在python中做同样的事情? 我尝试做的一件事是将查询一次限制为1000行,如下所示: 但是,

  • 问题内容: 我使用此命令在两列表中插入一些单词: 如何获取每个单词插入行的ID(主键)。我的意思是执行后返回“ 55,56,57”之类的值。MySQL有这样的反应吗? 术语列是。如果一个术语已经存在,MySQL将不会插入它。是否可以返回该重复项的引用(即该术语所在行的ID)?像“55,A响应 12 ,56”。 问题答案: 您可以通过调用框架或MySQL库(使用任何语言)来获取它。 那行不通。插入后

  • 问题内容: 如何使用PHP获取MySQL中最后更新的行的ID? 问题答案: 我找到了这个问题的答案:) *由aefxx *编辑 可以进一步扩展此技术以检索受更新语句影响的每一行的ID: 这将返回一个字符串,其中所有ID都由逗号连接。

  • 问题内容: 有人知道MySQL中是否有这样的功能吗? 更新 这不会输出任何有效的信息: 或者也许MySQL本身不知道确切使用了什么,那很好,我们可以在这里介入,只要我能获得不像… 问题答案: 从手册(第9.6节): 可以按以下方式检索全局时区和特定于客户时区的当前值: 编辑如果MySQL设置为系统时区的从属,则以上内容将返回,没有帮助。由于您使用PHP,如果从MySQL的答案是,你可以接着问什么时

  • 问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 4年前关闭。 改善这个问题 我有一个表user_places像这样: 我正在尝试获取用户的最新recorded_date和他最常访问的地点的名称。 问题答案: 如果数据不是太大,则可以在MySQL中使用此技巧: