Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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-重新排序/重置位置键_Mysql - Fatal编程技术网

Mysql-重新排序/重置位置键

Mysql-重新排序/重置位置键,mysql,Mysql,我有一个MySQL表,位置键为65000条记录。我删除了,在表格中间更新了一些行。例如,现在我在1-6-2-9的位置上有类似的东西 身份证件 类别 位置 1. 1. 1. 2. 1. 6. 3. 2. 2. 4. 2. 9 试试这个: 更新源表 按类别顺序按位置在分区上连接选择id、行号 使用id从源_表子查询 设置source_table.position=subquery.position mysql>显示变量,如%version%;5.7.24–射手座 更新源表 连接选择t1.id,COU

我有一个MySQL表,位置键为65000条记录。我删除了,在表格中间更新了一些行。例如,现在我在1-6-2-9的位置上有类似的东西

身份证件 类别 位置 1. 1. 1. 2. 1. 6. 3. 2. 2. 4. 2. 9 试试这个:

更新源表 按类别顺序按位置在分区上连接选择id、行号 使用id从源_表子查询 设置source_table.position=subquery.position mysql>显示变量,如%version%;5.7.24–射手座

更新源表 连接选择t1.id,COUNTt2.id位置 从源_表t1 在t1.category=t2.category上连接源\表t2 和t1.position>=t2.position 按t1.id分组使用id的子查询 设置source_table.position=subquery.position; 如果位置重复,一切都会崩溃——射手座

更新源表 连接选择t1.id,COUNTt2.id位置 从源_表t1 在t1.category=t2.category上连接源\表t2 t1.position>t2.position 或t1.position=t2.position 和t1.id>=t2.id 按t1.id分组使用id的子查询 设置source_table.position=subquery.position;
我认为此代码易于理解和应用。

@谢谢您的回答,如何使用它?在mysql控制台中,我有1064-您的数据库中出现了一些错误syntax@sagittarius指定精确的MySQL版本。@Akina MySQL>显示变量,如%version%;5.7.24@sagittarius你应该从这些信息开始提问!等待完成。@Akina现在没有错误,但所有位置都是1个类别=1个位置1,1,1,1,1个类别=2个位置1,1,1,1,1,并且应该是类别=1个位置1,2,3,4个类别=2个位置1,2,3,4@yusufhayırsever是的,但我有1064-我把它放在phpmysql控制台上,您的语法有点错误。我将source_table更改为Photos。你能再试一次吗?@yusuf hayırsever same 1064-你的语法有问题,可能是我做错了什么?虽然这段代码可能会解决这个问题,但如何以及为什么解决这个问题会真正有助于提高你的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。
UPDATE source_table t1
INNER JOIN
(
   SELECT id,category,position, ROW_NUMBER() OVER (PARTITION BY category 
       ORDER BY position) position2 
       FROM source_table 
) t2
    ON t2.id = t1.id
SET
    t1.position = t2.position2