2013-09-22 46 views
0

我有一個重複字和由「num」命名的空字段的表。MySQL向列插入重複字的數量

+----+--------------+-----+ 
| 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這樣做呢?

+0

是列表固定或現在還在嗎? – djot

+0

列表已修復,而我正在使用mysql。 – Hossein

回答

5

這是MySQL

您可以加入一個子查詢,它會根據ID使用相關子查詢在每個words上生成一個rownumber。

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 
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; 
0

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

select id,word,row_number() over(partition by word order by id) 
from t1 
order by id;