加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – MySQL:如何获取带行的序列号?

发布时间:2020-12-13 22:07:29 所属栏目:PHP教程 来源:网络整理
导读:如何在最低ID为#1且最高ID为#numberOfResults的情况下对结果进行编号 示例:如果我的表中只有3行.它的ID是24,87,112,它会像这样拉: ID 24 87 112Num 1 2 3 我想要这个的原因是,我的经理希望项目的编号类似于item1,item2等.我最初制作它所以它使用了ID,但他
如何在最低ID为#1且最高ID为#numberOfResults的情况下对结果进行编号

示例:如果我的表中只有3行.它的ID是24,87,112,它会像这样拉:

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值都会递增.无论访问行的顺序如何,它始终会生成一个连续的数字列表.所以它对某些东西很方便,对其他东西很危险……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读