2017-02-01 84 views
0

我想按特定順序將數據插入表中。這是因爲我需要給每個條目一個特定的ID。我正在使用的是一個選擇聲明:MySQL:按順序插入選擇

select (@i := @i + 1) as id, ... 
order by column 

我遇到的問題是,這似乎並不奏效。我從選擇查詢中得到我想要的結果。但是,當我嘗試將數據插入到表中時,按語句順序將被忽略。有沒有辦法強制插入語句中的正確順序?

我想是這樣的:

+----+------+-------------+ 
| id | name | breadcrumbs | 
+----+------+-------------+ 
| 1 | test | 01   | 
| 5 | -d | 01,05  | 
| 4 | c | 04   | 
| 6 | e | 06   | 
| 2 | -a | 06,02  | 
| 3 | --b | 06,02,03 | 
+----+------+-------------+ 

要成爲這樣的:

+----+------+-------------+ 
| id | name | breadcrumbs | 
+----+------+-------------+ 
| 1 | test | 01   | 
| 2 | -d | 01,05  | 
| 3 | c | 04   | 
| 4 | e | 06   | 
| 5 | -a | 06,02  | 
| 6 | --b | 06,02,03 | 
+----+------+-------------+ 

在一個單獨的臨時表。

+0

你要基於排序在父母,子女麪包屑IDS,孫子基礎上選擇 - 例如01首,然後01, 02,01,02,03,01,03,02,02,01等等? –

回答

0

我想按特定的順序在表中插入數據。

MySQL數據庫表中沒有記錄的內部命令。表格是在無序集合之後建模的。唯一存在的順序是您在查詢時使用ORDER BY子句應用的順序。因此,向前推進,而不是擔心插入記錄的順序,您應該確保您的表具有必要的列和數據,以便按照您的要求對結果集進行排序。

1

我會做出一定的@i是initalised看到以下條款

MariaDB [sandbox]> drop table if exists t; 
Query OK, 0 rows affected (0.14 sec) 

MariaDB [sandbox]> 
MariaDB [sandbox]> create table t(id int, name varchar(10), breadcrumbs varchar(100)); 
Query OK, 0 rows affected (0.18 sec) 

MariaDB [sandbox]> insert into t values 
    -> ( 1 , 'test' , '01'  ), 
    -> ( 5 , '-d' , '01,05' ), 
    -> ( 4 , 'c' , '04'  ), 
    -> ( 6 , 'e' , '06'  ), 
    -> ( 2 , '-a' , '06,02' ), 
    -> ( 3 , '--b' , '06,02,03'); 
Query OK, 6 rows affected (0.01 sec) 
Records: 6 Duplicates: 0 Warnings: 0 

MariaDB [sandbox]> 
MariaDB [sandbox]> drop table if exists t1; 
Query OK, 0 rows affected (0.13 sec) 

MariaDB [sandbox]> create table t1 as 
    -> select 
    -> @i:[email protected]+1 id, 
    -> t.name,t.breadcrumbs 
    -> from (select @i:=0) i, 
    -> t 
    -> order by breadcrumbs; 
Query OK, 6 rows affected (0.22 sec) 
Records: 6 Duplicates: 0 Warnings: 0 

MariaDB [sandbox]> 
MariaDB [sandbox]> select * from t1; 
+------+------+-------------+ 
| id | name | breadcrumbs | 
+------+------+-------------+ 
| 1 | test | 01   | 
| 2 | -d | 01,05  | 
| 3 | c | 04   | 
| 4 | e | 06   | 
| 5 | -a | 06,02  | 
| 6 | --b | 06,02,03 | 
+------+------+-------------+ 
6 rows in set (0.00 sec) 
+0

替換插入與創建表的做法。 – user110971