2009-05-22 37 views
4

我想將數組存儲在記錄中。MySQL中的數組

表1:

 
ID, Name, Friends (friends should be an array) 
1, Bill, 2&3 
2, Charles, 1&3 
3, Clare, 1 

我希望能夠做這樣的搜索:

 
SELECT * FROM Table1 WHERE Friends='3' 

發現大家誰也克萊爾列爲朋友

回答

15

除非你有一個很好的理由這樣做,你應該讓你的數據歸一化,並存儲在不同的表之間的關係。我想也許你正在尋找的是這樣的:

CREATE TABLE people (
    id int not null auto_increment, 
    name varchar(250) not null, 
    primary key(id) 
); 

CREATE TABLE friendships (
    id int not null auto_increment, 
    user_id int not null, 
    friend_id int not null, 
    primary key(id) 
); 

INSERT INTO people (name) VALUES ('Bill'),('Charles'),('Clare'); 

INSERT INTO friendships (user_id, friend_id) VALUES (1,3), (2,3); 

SELECT * 
    FROM people p 
    INNER JOIN friendships f 
     ON f.user_id = p.id 
    WHERE f.friend_id = 3; 
 
+----+---------+----+---------+-----------+ 
| id | name | id | user_id | friend_id | 
+----+---------+----+---------+-----------+ 
| 1 | Bill | 1 |  1 |   3 | 
| 2 | Charles | 2 |  2 |   3 | 
+----+---------+----+---------+-----------+ 
2 rows in set (0.00 sec) 
+1

正確和最好的方法。這是關係數據庫的語法。更好地使用此解決方案 - 它通過時間和經驗進行測試。 而且,順便說一句,我想知道,適度(當然,你需要它)的序列化數組看起來像? – Jet 2009-05-22 09:10:27

2

你可能需要一個逗號分隔值,但不推薦。爲什麼不使用另一個表來顯示關係?

Table2 
---------------------- 
PARENT_ID | FRIEND_ID 
---------------------- 
1   | 2 
1   | 3 
2   | 1 
2   | 3 
---------------------- 
2

這看起來像一個關係表,而不是完美的地方: 表1:

ID, Name 
1, Bill 
2, Charles 
3, Clare 

表2(關係表)

ID, FriendID 
1, 2 
1, 3 
2, 1 
2, 3 
3, 1 

第二張表跟蹤通過連接來自Table1的ID的朋友關係。