Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql根据两个字段进行排序,然后将;id";柱_Mysql_Sorting - Fatal编程技术网

mysql根据两个字段进行排序,然后将;id";柱

mysql根据两个字段进行排序,然后将;id";柱,mysql,sorting,Mysql,Sorting,我有一个5列表格(列为id、答案、权重、测验id和问题id) 我想按问题_id排序,然后按weight排序,然后我想根据这个双重排序,递增地重新编号id列。 在mysql中是否可能(我使用的是phpmyadmin) 谢谢 比如: SELECT @curRow := @curRow + 1 AS id, T.Answer, T.Weight, T.Quiz_Id, T.Question_Id FROM wp_wpss_Answers T JOIN (SELECT @cur

我有一个5列表格(列为id、答案、权重、测验id和问题id) 我想按问题_id排序,然后按weight排序,然后我想根据这个双重排序,递增地重新编号id列。 在mysql中是否可能(我使用的是phpmyadmin)

谢谢

比如:

SELECT 
   @curRow := @curRow + 1 AS id,
   T.Answer, T.Weight, T.Quiz_Id, T.Question_Id
FROM wp_wpss_Answers T
   JOIN    (SELECT @curRow := 0) r
ORDER BY QuestioN_Id, Weight
LIMIT 0 , 1000

假设您只想在查询中显示行号,请使用以下方法:

SELECT 
   @curRow := @curRow + 1 AS RowNumber,
   T.Answer, T.Weight, T.Quiz_Id, T.Question_Id, T.Id
FROM YourTable T
   JOIN    (SELECT @curRow := 0) r
ORDER BY QuestioN_Id, Weight
UPDATE YourTable t
  JOIN (SELECT 
       @curRow := @curRow + 1 AS RowNumber,
       T.Answer, T.Weight, T.Quiz_Id, T.Question_Id, T.Id
    FROM YourTable T
       JOIN    (SELECT @curRow := 0) r
    ORDER BY QuestioN_Id, Weight) T2 ON T.Id = T2.Id
SET t.Id = T2.RowNumber
如果你想更新你的身份证,你可以使用上面的,但我想问你为什么要这样做?我看不出有任何理由对ID列重新编号——将其设置为标识,然后让MySQL来处理

但是,要更新Id列,请尝试以下操作:

SELECT 
   @curRow := @curRow + 1 AS RowNumber,
   T.Answer, T.Weight, T.Quiz_Id, T.Question_Id, T.Id
FROM YourTable T
   JOIN    (SELECT @curRow := 0) r
ORDER BY QuestioN_Id, Weight
UPDATE YourTable t
  JOIN (SELECT 
       @curRow := @curRow + 1 AS RowNumber,
       T.Answer, T.Weight, T.Quiz_Id, T.Question_Id, T.Id
    FROM YourTable T
       JOIN    (SELECT @curRow := 0) r
    ORDER BY QuestioN_Id, Weight) T2 ON T.Id = T2.Id
SET t.Id = T2.RowNumber
这是我的答案

但你真的应该重新考虑这个方法


祝你好运。

你想更新数据库中的ID列还是只显示新的行号?不确定为什么要更新ID列--设置为一个标识,并让MySQL相应地增加它。我想更新ID列这是个坏主意。一般来说,数据库不需要重新编号——它会给您带来比任何感知到的好处都更令人头痛的问题。