将特定次数的相同值分配给不同的行(Mysql)

时间:2014-05-18 18:19:08

标签: mysql database auto-increment

我要在网站上创建用户数据库。我正在使用MySQL。

当用户在网站上进行注册过程时,需要添加用户的表格进行以下过程:

当新用户被添加到表“users”时,在该表中有一个名为“group”的列。因此要求此字段或列生成自动增量编号,但具有重复每个值四(4)次的属性。并且还要求仅为16384个用户限制注册过程。

e.g:

id  | name      | group
1   | mark      | 1
2   | john      | 1
3   | sammy     | 1
4   | lucy      | 1
5   | richard   | 2
6   | michel    | 2
7   | jennifer  | 2
8   | mary      | 2
9   | liz       | 3
10  | mike      | 3
11  | laura     | 3
12  | astrid    | 3

我正在搜索和阅读这么多,但这个问题看起来很独特,我不得不接受我对这些主题的理解不多,而我现在才刚刚学习MySQL和数据库。

我在 w3school.com 中找到了一些东西,这是我修改过的代码:

在HTML上创建表单:

<html>
<body>

<form action="insert.php" method="post">
name: <input type="text" name="name">
<input type="submit">
</form>

</body>
</html>

和PHP“insert.php”:

<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// escape variables for security
$name = mysqli_real_escape_string($con, $_POST['name']);
$group= (WHAT CAN I PUT HERE TO MAKE THE AUTO INCREMENT BUT REPEATING THE SAME 
NUMBER FOUR TIMES?)

$sql="INSERT INTO Persons (Name, Group)
VALUES ('$name', '$group')";

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo "1 record added";

mysqli_close($con);
?>

我在这里可以做些什么来限制只注册16384个用户?

1 个答案:

答案 0 :(得分:0)

目前还不清楚您是想要update还是select。这是select版本:

select t.id, t.name,
       (case when (@rn := @rn+1) is NULL then NULL
             else floor((@rn - 1)/4)
        end) as grp
from (select t.*, 
      from table t cross join
           (select @rn := 0) var
      order by id
      limit 16384
     ) t;

如果您可以依赖id列顺序而没有间隙,那么您可以改用它。

如果您需要update,可以使用update / join来合并这些结果。