在mysql中选择用户重置增量计数器

时间:2018-03-19 10:05:02

标签: mysql

我在这篇文章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,它将继续增量。 如何进行查询以使输出看起来像那样?谢谢!

2 个答案:

答案 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;

run on SQL Fiddle