如何在mysql中对列进行排序并获取另一列的排序值?

时间:2016-07-21 13:19:10

标签: mysql

我有一个包含三个字段的表,

id          (int)
shortnameid (varchar)
name        (varchar)

name包含数字和字符串,例如:(01.john)

我需要使用id将表排序为ASC,并获取name列的排序顺序(按id排序后)。 这将返回严重的已排序数字:

SELECT * FROM  `tablename` ORDER BY  `tablename`.`id` ASC

但是我需要id列的排序值(在按name排序之后)。

4 个答案:

答案 0 :(得分:1)

按名称

添加名称列
SELECT * FROM  `tablename` ORDER BY  `tablename`.`id` ASC,`tablename`.`name`;

答案 1 :(得分:0)

你的问题不是很清楚。

select `name`
FROM 
`tablename`
ORDER BY `tablename`.`id` ASC

将仅返回name的列表,按id ASC

排序

如果您希望按name排序,则:

select `name`
FROM 
`tablename`
ORDER BY `tablename`.`id` ASC, `tablename`.`name`

如果这个或其他答案不符合您的要求,那么您需要重申您的问题。

答案 2 :(得分:0)

首先..你的设计是错误的......你不满足1 Normal Form - 那就是不要在一列中混合多个信息..

您可以同时制作两列的主键(如果id不唯一):

PRIMARY KEY(id, name) 

您无需创建额外的列以获得独特的内容..

此外,其他答案是正确的..或者没有人理解你想要的。

这是您通过查询得到的:

1 Bill 1.Bill
2 AAA 2.AAA
2 ZZZ 2.ZZZ
2 BBB 2.BBB
3 AAA 3.AAA

通过Mahesh Madushanka查询,您得到:

1 Bill 1.Bill
2 AAA 2.AAA
2 BBB 2.BBB
2 ZZZ 2.ZZZ
3 AAA 3.AAA

你还想做什么?

<强>更新

你想要这样的东西(根据上面给出的例子数据)吗?

id  |  names          | .... |
-----------------------
1   | "Bill"          |
2   | "AAA, BBB, ZZZ" |
3   | "AAA"           |

答案 3 :(得分:0)

您可以使用相当神秘的语法执行此操作:

update table name
    set id = (select cnt
                    from (select count(*) as cnt
                          from table Name Name2
                          where Name2.shortnameid >= table name.shortnameid
                         )
                   )