2017-01-05 46 views
0

我試圖在同一列中插入多個值到一行。例如: :其中ID = 5以在column1中設置值:4,7,9而不是字符串。MYSQL - 如何在同一列和行中設置多個值mysql

+2

如果您打算稍後將它們作爲單獨的值處理,則在單個列中存儲逗號分隔值幾乎總是一個非常糟糕的主意;在數據庫中,哪些表是用於。 (即創建一個有2列和3行5,4 | 5,7 | 5,9等的表格) –

+0

請解釋你正在做什麼。爲什麼地球上存儲4,7,9? – BeNice

回答

0

改變你表的設計:

ID | Column1 
---+---------- 
5 | 4 
5 | 7 
5 | 9 

然後你可以選擇:

SELECT * FROM table WHERE ID = 5 

讓所有的值。

1

你卡爾索其存儲在SET

CREATE TABLE `jj` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `s` set('1','2','3') DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; 

並插入這樣的:

INSERT INTO `jj` (`id`, `s`) 
VALUES 
    (3, '2'), 
    (4, '2,3'); 

樣品

MariaDB [l]> SELECT * FROM jj; 
+----+------+ 
| id | s | 
+----+------+ 
| 1 | 2 | 
| 2 | 2 | 
| 3 | 2 | 
| 4 | 2,3 | 
+----+------+ 
4 rows in set (0.00 sec) 

MariaDB [l]> INSERT INTO `jj` (`id`, `s`) 
    -> VALUES 
    ->  (5, '1,3'), 
    ->  (6, '1,2'); 
Query OK, 2 rows affected (0.00 sec) 
Records: 2 Duplicates: 0 Warnings: 0 

MariaDB [l]> SELECT * FROM jj; 
+----+------+ 
| id | s | 
+----+------+ 
| 1 | 2 | 
| 2 | 2 | 
| 3 | 2 | 
| 4 | 2,3 | 
| 5 | 1,3 | 
| 6 | 1,2 | 
+----+------+ 
6 rows in set (0.00 sec) 

MariaDB [l]> 
+0

它存儲逗號分隔字符串幾乎總是一個非常糟糕的想法 – RiggsFolly

+0

@RiggsFolly - 將數據存儲在數據庫的核心數據類型中不是一個好主意。 SET被設計來做到這一點。這是來自MAriaDB的SET的定義:**一組。一個可以有零個或多個值的字符串對象,每個值必須從值'value1','value2'列表中選擇,SET列最多可以有64個成員。 SET值在內部表示爲整數。** –

+0

@RiggsFolly - 所以你不會在一個集合中存儲一個字符串,而是存儲一個位掩碼。 Mysql只將字符串轉換爲位字段。在時間戳中存儲字符串「2017-01-01 12:00:00」時也是如此。 –

相關問題