2016-04-22 79 views
1

我的SELECT查询MySQL查询ORDER BY与模

SELECT ID, NAME FROM TBL_USER ORDER BY ID % 2, ID % 3 

OUTPUT:

ID | NAME 
--------|--------- 
    6 | AB 
    12 | BC 
    4 | XY 
    10 | YZ 
    2 | C1 
    8 | C2 
    3 | A3 
    9 | MN 
    1 | K2 
    7 | WQ 
    13 | OP 
    5 | HJ 
    11 | KN 

我感到困惑如何ORDER BY与模量(%)的作品。这个订单如何产生?

回答

2

如果更改查询

SELECT ID, NAME, ID %2, ID %3 FROM TBL_USER ORDER BY ID % 2, ID % 3 

以包含ORDER BY操作价值观上很清楚:

+------+------+-------+-------+ 
| ID | NAME | ID %2 | ID %3 | 
+------+------+-------+-------+ 
| 6 | AB |  0 |  0 | 
| 12 | BC |  0 |  0 | 
| 4 | XY |  0 |  1 | 
| 10 | YZ |  0 |  1 | 
| 2 | C1 |  0 |  2 | 
| 8 | C2 |  0 |  2 | 
| 9 | MN |  1 |  0 | 
| 3 | A3 |  1 |  0 | 
| 1 | K2 |  1 |  1 | 
| 7 | WQ |  1 |  1 | 
| 13 | OP |  1 |  1 | 
| 5 | HJ |  1 |  2 | 
| 11 | KN |  1 |  2 | 
+------+------+-------+-------+ 
+0

谢谢! ...很好的答案:) – muzahidbechara

1

假设你明白MOD是如何工作的,这里的表显示该值实际上是按正确的顺序。您可以通过将您的选择语句更改为:

SELECT ID, ID % 2, ID % 3, NAME FROM TBL_USER ORDER BY ID % 2, ID % 3; 

    ID | ID % 2 | ID % 3 | NAME 
--------|----------|----------|-------- 
    6 |  0 |  0 | AB 
    12 |  0 |  0 | BC 
    4 |  0 |  1 | XY 
    10 |  0 |  1 | YZ 
    2 |  0 |  2 | C1 
    8 |  0 |  2 | C2 
    3 |  1 |  0 | A3 
    9 |  1 |  0 | MN 
    1 |  1 |  1 | K2 
    7 |  1 |  1 | WQ 
    13 |  1 |  1 | OP 
    5 |  1 |  2 | HJ 
    11 |  1 |  2 | KN 
+0

谢谢...但答案看起来与以前相同 – muzahidbechara