gpt4 book ai didi

mysql - 使用根据字段重置的递增值更新字段

转载 作者:行者123 更新时间:2023-11-29 13:01:22 25 4
gpt4 key购买 nike

我在 MySQL 中有下表:

|id|user|line|
|10|0001| |
|11|0001| |
|12|0002| |
|13|0003| |
|14|0003| |
|15|0003| |

我需要将行列更新为为每个用户重置的递增数字,因此我最终会得到以下结果:

|id|user|line|
|10|0001| 1|
|11|0001| 2|
|12|0002| 1|
|13|0003| 1|
|14|0003| 2|
|15|0003| 3|

我用过ROW_NUMBER() OVER (PARTITION...过去在 MS SQL 中为此。 MySQL 有没有办法做到这一点?

最佳答案

我不知道如何使用纯 SQL 来做到这一点。你可以看看MySQLs GROUP BY看看它是否能让你到达任何地方?

<小时/>

这是一个 PHP 解决方案:

<?php
$mysql_host="localhost";
$mysql_user="MYSQL USERNAME";
$mysql_password="MYSQL PASSWORD";
$mysql_database_name="SOME_DB_NAME";
$table="MYSQL TABLE NAME";

$con=mysql_connect($mysql_host, $mysql_user, $mysql_password);
mysql_selectdb($mysql_database_name, $con);
$query=mysql_query("SELECT * FROM `$table`");

// $toUpdate will be used to store the info that is needed to update
// the appropriate line with the respective line number

// $userTracker will contain which "line" number we are on
while(mysql_fetch_assoc($query) as $row){
$rowID=$row['id'];
$userNumber=$row['user'];
$nextLineNumberForThisUser=$userTracker[$userNumber];
if (!$nextLineNumberForThisUser){
$nextLineNumberForThisUser=1;
}
else{
++$nextLineNumberForThisUser;
}

$u=&$toUpdate[];
$u['id']=$rowID;
$u['line']=$nextLineNumberForThisUser;
$userTracker[$userNumber]=$nextLineNumberForThisUser;
}


foreach ($toUpdate as $row){
$id=$row['id'];
$line=$row['line'];
mysql_query("UPDATE `$table` SET `line`='$line' WHERE `id`='$id'");
}
?>

关于mysql - 使用根据字段重置的递增值更新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23296688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com