0

我有一个包含重复单词的表和一个名为“num”的空字段。

+----+--------------+-----+
| id | words        | num |
+----+--------------+-----+
| 1  | red          |     |
+----+--------------+-----+
| 2  | blue         |     |
+----+--------------+-----+
| 3  | red          |     |
+----+--------------+-----+
| 4  | red          |     |
+----+--------------+-----+
| 5  | blue         |     |
+----+--------------+-----+

我想在 num 字段中插入重复单词的数量,如下所示:

+----+--------------+-----+
| id | words        | num |
+----+--------------+-----+
| 1  | red          | 1   |
+----+--------------+-----+
| 2  | blue         | 1   |
+----+--------------+-----+
| 3  | red          | 2   |
+----+--------------+-----+
| 4  | red          | 3   |
+----+--------------+-----+
| 5  | blue         | 2   |
+----+--------------+-----+

我怎样才能通过 php 或 sql 做到这一点?

4

3 回答 3

5

这是为了MySQL.

words您可以加入一个子查询,该子查询基于ID使用相关子查询在每个上生成一个行号。

UPDATE  tableName a
        INNER JOIN
        (
            SELECT  a.id, 
                    (
                        SELECT  COUNT(*)
                        FROM    tableName c
                        WHERE   c.words = a.words AND
                                c.id <= a.id
                    ) AS RowNumber
            FROM    TableName a
        ) b ON a.id = b.id
SET     a.num = b.rownumber
于 2013-09-22T19:52:04.163 回答
1

这样的事情将是实现它的简单方法:

CREATE TABLE tmp_colors ( 
   id int auto_increment primary key,
   word varchar(16) NOT NULL
);

INSERT INTO tmp_colors SELECT words FROM table GROUP BY words;

UPDATE table t1 JOIN tmp_colors t2 ON t2.word = t1.words SET t1.num = t2.id;
于 2013-09-22T19:47:45.710 回答
0

如果 DBMS 支持窗口函数(如 Oracle 或 MS SQL Server):

select id,word,row_number() over(partition by word order by id)
from t1 
order by id;
于 2013-09-22T20:02:50.793 回答