我有一个表格,里面有重复的单词和一个以"num"命名的空字段。
+----+--------------+-----+
| id | words | num |
+----+--------------+-----+
| 1 | red | |
+----+--------------+-----+
| 2 | blue | |
+----+--------------+-----+
| 3 | red | |
+----+--------------+-----+
| 4 | red | |
+----+--------------+-----+
| 5 | blue | |
+----+--------------+-----+
我想在数字字段中插入重复单词的数量,如下所示:
+----+--------------+-----+
| id | words | num |
+----+--------------+-----+
| 1 | red | 1 |
+----+--------------+-----+
| 2 | blue | 1 |
+----+--------------+-----+
| 3 | red | 2 |
+----+--------------+-----+
| 4 | red | 3 |
+----+--------------+-----+
| 5 | blue | 2 |
+----+--------------+-----+
我怎样才能通过PHP或SQL来做到这一点?
这是
给MySQL
的。
您可以使用相关子查询联接一个子查询,该子查询根据ID
在每个words
上生成行号。
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
- SQLFiddle 演示
这样的事情将是一种简单的方法来实现它:
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;
如果 DBMS 支持窗口函数(如 Oracle 或 MS SQL Server):
select id,word,row_number() over(partition by word order by id)
from t1
order by id;