|
如何编号最低ID为#1而最高ID为#numberOfResults的结果
! j& o- B1 K/ |1 H8 M k! c示例:如果我有一个仅包含3行的表。其ID为24、87、112的ID会像这样拉:
7 s8 K: V/ I3 n) rID 24 87 112, |5 I% H- L7 S8 F% n6 o2 Q
Num 1 2 3
/ j. z+ K5 ~$ { V; W" f; ]我想要这个的原因是,我的经理希望项目编号为item1,item2等。我最初是这样做的,所以它使用了ID,但他看到的项目就像item24,item87,item112。他一点都不喜欢它,希望它们像item1,item2,item3。我个人认为这将导致问题,因为如果您要删除和添加项目,则item2不会总是引用相同的内容,并且可能会给用户造成混乱。因此,如果有人有更好的主意,我想听听。
) q) H2 f4 u! x# H. S+ N* U( z4 n/ X谢谢。8 a( B$ M3 h8 }. I" O/ A
G: O5 k- y/ D' ~9 S. W解决方案:
1 a+ A: Z0 _& c% s, q
( T: X- h4 G) X1 A# u _, v( S* |
# K- S2 e0 _7 x
4 ]/ i, R3 `7 A2 l 如果数字将用于除带数字的项目的简单有序显示之外的其他任何内容,则我同意 不# ?( I0 P, N9 D0 j7 |
使用这样的编号方案的评论。如果数字实际上要与某物联系在一起,那么这是一个非常糟糕的主意!" h1 \8 O- A& F7 S% ]# a; ~9 ]
使用一个变量,并在SELECT语句中增加它:
( W b: ?0 c9 e9 V7 K# SSELECT# }6 o$ L7 {7 b7 l
id," f# }4 N. U- e; j+ U) b7 s$ \4 k
(@row:=@row+1) AS row- v% l5 j- M6 u* h3 B' m
FROM table,: V7 l4 K6 I# _# d* x* v/ ?6 P* }. M
(SELECT @row:=0) AS row_count;' f' Q+ b4 D' t9 N
例子:7 K: H! x) ~+ `
CREATE TABLE `table1` (8 ~7 b: J8 Y: m7 I& u
`id` int(11) NOT NULL auto_increment,5 V+ T6 r/ }$ D
PRIMARY KEY (`id`)$ E7 I3 i- [5 E# q! p- q
) ENGINE=InnoDB( d, W' _2 t0 y+ l( k. i
INSERT INTO table1 VALUES (24), (87), (112);2 n9 T" ~ I: n9 ^3 m. L% t4 X
SELECT
$ C8 k/ T* n9 r1 ~8 a" W id,6 a- [/ y6 ~$ T6 c
(@row:=@row+1) AS row
+ c' W, [$ m3 Y* }, YFROM table1,! T* G7 K# G& y( V9 _/ q6 a. J2 Y- P7 ?
(SELECT @row:=0) AS row_count;0 K- u/ j" c% g
+-----+------+9 D4 w: ~# I- K l4 w' u7 T! M2 ]
| id | row |
, z: } y' ~! I6 ^5 y+-----+------+- E& i( ~7 P# p: G( x
| 24 | 1 |
$ B3 j3 B1 b9 z0 f! R; @7 N$ V| 87 | 2 |! L5 e! L1 T* Z, O3 N7 k
| 112 | 3 |! ~3 p, k# }; P
+-----+------+
3 Q4 F% h! s5 w; u7 @5 ~怎么运行的
7 Z! W: S T f/ o C0 @@row是用户定义的变量。必须在主SELECT语句运行之前将其设置为零。可以这样完成:2 H2 g8 c$ p# Q) S
SELECT @row:=0;
- t; h6 g# a) t5 O% ?6 _1 S或像这样:. J8 I! h) i! T0 A _$ C
SET @row:=03 Q0 t J! G# |0 ]4 o- s
但是将这两个语句结合在一起很方便。这可以通过创建派生表来完成,这是在这里发生的:
! b# E3 b9 j* l5 BFROM table,, U s9 {7 N+ E) s
(SELECT @row:=0) AS row_count;
+ U/ S, V4 t" Y# }5 E6 G! ^第二个SELECT实际上首先运行。一旦完成,这只是增加@row检索到的每一行的值的一种情况:: @: Q4 C2 {9 _7 I7 z
@row:=@row+11 P$ O0 g9 h8 P m* X
@row每次检索行时,该值都会增加。无论访问行的顺序如何,它始终会生成一个顺序的数字列表。因此,对某些事情来说很方便,而对其他事情来说很危险… |
|