我在这篇文章select increment counter in mysql
中读到了关于select的增量创建变量我需要对此查询添加一些内容..我需要根据user_id重置增量。
示例数据:
id user_id name
1 1 A
2 2 B
3 3 C
4 1 D
5 2 E
6 2 F
7 1 G
8 3 H
预期结果:
id user_id name increment
1 1 A 1
4 1 D 2
7 1 G 3
2 2 B 1
5 2 E 2
6 2 F 3
3 3 C 1
8 3 H 2
它不会停止,直到3个增量,如果我有更多行user_id
,它将继续增量。
如何进行查询以使输出看起来像那样?谢谢!
答案 0 :(得分:0)
您不需要变量来执行此操作。简单的COUNT()和GROUP BY可以解决问题。
SELECT user_id, name, COUNT(user_id) AS increment FROM your_table GROUP BY user_id;
但是这将为一个用户返回一个值。
这将通过所有计数。
SELECT user_id, name, (SELECT COUNT(t2.user_id) FROM your_table t2 WHERE t2.user_id=t1.user_id) AS increment FROM your_table t1;
我不是larevel的专家。这是一个简单的PHP代码。
<?php
$db = new mysqli("localhost","root","","test");
$sql = $db->query("SELECT * FROM your_table ORDER BY user_id");
$name_array = array();
$array_counts = array();
?>
<table>
<tr>
<th>id</th>
<th>user id</th>
<th>name</th>
<th>increment</th>
</tr>
<?php
while ($row = $sql->fetch_assoc()){
if (in_array($row['user_id'],$name_array)){
$array_counts[$row['user_id']][0] = $array_counts[$row['user_id']][0]+1;
} else {
$array_counts[$row['user_id']][0] = 1;
}
array_push($name_array,$row['user_id']);
?>
<tr>
<td><?php echo $row['id']; ?></td>
<td><?php echo $row['user_id']; ?></td>
<td><?php echo $row['name']; ?></td>
<td><?php echo $array_counts[$row['user_id']][0]; ?></td>
</tr>
<?php
}
?>
</table>
答案 1 :(得分:0)
试试这个:
SELECT A.*, CASE WHEN id=user_id THEN 1
WHEN id>user_id THEN 2
ELSE 0 END increment
FROM yourTable A
ORDER BY A.user_id;