0

たとえば、私はtable1を持っています:

+---------------------+---------------+
| StartTime           | dIPaddr       |
+---------------------+---------------+
| 2014-04-09 09:47:53 | 0.210.208.240 |
| 2014-04-09 09:47:53 | 0.210.208.240 |
| 2014-04-09 09:47:55 | 0.210.208.240 |
| 2014-04-09 08:39:55 | 0.210.243.93  |
| 2014-04-09 08:39:57 | 0.210.243.93  |
| 2014-04-09 08:40:00 | 0.210.243.93  |
| 2014-04-09 13:02:25 | 0.210.25.224  |
| 2014-04-09 13:02:25 | 0.210.25.224  |
| 2014-04-09 13:02:25 | 0.210.25.224  |
| 2014-04-09 13:02:27 | 0.210.25.224  |
+---------------------+---------------+

今、私は結果を取得したい:

+---------------------+---------------+---------------+
| StartTime           | dIPaddr       | rowid         |
+---------------------+---------------+---------------+
| 2014-04-09 09:47:53 | 0.210.208.240 | 1             |
| 2014-04-09 09:47:53 | 0.210.208.240 | 2             |
| 2014-04-09 09:47:55 | 0.210.208.240 | 3             |
| 2014-04-09 08:39:55 | 0.210.243.93  | 1             |
| 2014-04-09 08:39:57 | 0.210.243.93  | 2             |
| 2014-04-09 08:40:00 | 0.210.243.93  | 3             |
| 2014-04-09 13:02:25 | 0.210.25.224  | 1             |
| 2014-04-09 13:02:25 | 0.210.25.224  | 2             |
| 2014-04-09 13:02:25 | 0.210.25.224  | 3             |
| 2014-04-09 13:02:27 | 0.210.25.224  | 4             |
+---------------------+---------------+---------------+

行 ID は自動的に増加しますが、dIPaddr によってグループ化されます。使ってみます

ALTER TABLE table1 ADD COLUMN rowId int not null auto_increment 
group by dIPaddr;

しかし、それは私にエラーを表示するだけです。私が望む結果を得るにはどうすればよいですか?

4

1 に答える 1

1

これは InnoDB では直接利用できません。2列のPRIMARY KEY(dIPaddr、rowId)があるMyISAMで利用できるようなもの。これは次のように切り替わります(私は思います):

ALTER TABLE table1
ADD COLUMN rowId int not null auto_increment,
ADD PRIMARY KEY(dIPaddr, rowId),
ENGINE=MyISAM;

GROUP BY は使用されません。(しかし、それは良い推測でした。)

その後、INSERT に rowId を含めないでください。システムによって自動的に提供されます。

InnoDB を使い続けたい場合は、@variables を使用して、rowId をテーブルに追加できます。ただし、TRIGGER を記述しない限り、新しい行の rowId は自動的に提供されません。

于 2015-02-25T05:51:57.330 に答える