Mysqli:如何通过读取和循环遍历所有行来更新?

时间:2012-07-28 11:09:02

标签: mysql mysqli

以下是一个示例结构:

table `pligg`
#id   #alpha     #num
1       a        null
2       b        null
3       c        null
4       a        null
5       d        null
6       b        null
7       a        null
8       e        null

我想在单个mysqli查询之后更新像这样的数据库:

table `pligg`
#id   #alpha     #num
1       a        1
2       b        1
3       c        1
4       a        2
5       d        1
6       b        2
7       a        3
8       e        1

我要做的是使用重复次数更新列num。 我尝试了这个查询,但徒劳无功

mysqli_query($mysqli, "UPDATE pligg SET 'num' = COUNT(DISTINCT alpha) WHERE 'id'<id");

1 个答案:

答案 0 :(得分:4)

这应该可以解决问题:

UPDATE pligg a
INNER JOIN
(
    SELECT a.id, a.alpha, COUNT(1) AS dup_cnt
    FROM pligg a
    INNER JOIN pligg b ON a.id >= b.id AND a.alpha = b.alpha
    GROUP BY a.id, a.alpha
) b ON a.id = b.id
SET a.num = b.dup_cnt

SQLFiddle Demo