2009-05-22 5 views
4

Je veux stocker un tableau dans un enregistrement.tableau dans MySQL

Tableau 1:

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

Je veux être en mesure de faire une recherche comme celui-ci:

 
SELECT * FROM Table1 WHERE Friends='3' 

pour trouver tous ceux qui ont Clare répertorié comme un ami

Répondre

15

Sauf si vous avez une très bonne raison pour le faire, vous devez conserver vos données normalisées et stocker les relations dans une autre table. Je pense que peut-être ce que vous cherchez est le suivant:

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

Correct et la meilleure façon. C'est la grammaire des bases de données relationnelles. Mieux utiliser cette solution - il est testé par le temps et l'expérience. Et, d'ailleurs, je me demande, à quoi ressemblera la modération (bien sûr, vous en aurez besoin) des tableaux sérialisés? – Jet

+0

Merci, j'ai utilisé cette solution. – Hintswen

2

Vous voudrez peut-être un valeur séparée par des virgules, mais ce n'est pas recommandé. Pourquoi ne pas utiliser une autre table pour montrer des relations?

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

Cela ressemble à l'endroit idéal pour une table de relation à la place: Tableau 1:

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

Tableau 2 (table de relation)

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

La deuxième table conserve la trace de les relations d'amis en connectant les ID de Table1.

Questions connexes