2009-05-22 5 views
4

Ich möchte ein Array in einem Datensatz speichern.Array in MySQL

Tabelle 1:

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

Ich möchte eine Suche wie diese in der Lage sein zu tun:

 
SELECT * FROM Table1 WHERE Friends='3' 

alle zu finden, die Clare als Freund aufgelistet hat

Antwort

15

Wenn Sie keinen wirklich guten Grund dafür haben, sollten Sie Ihre Daten normalisieren und die Beziehungen in einer anderen Tabelle speichern. Ich denke, vielleicht das, was Sie suchen ist dies:

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

Korrekt und der beste Weg. Dies ist die Grammatik von relationalen Datenbanken. Verwenden Sie diese Lösung besser - sie wird nach Zeit und Erfahrung getestet. Und, btw, ich frage mich, was wird die Moderation (sicher, Sie werden es brauchen) von serialisierten Arrays aussehen ?? – Jet

+0

Danke, ich habe diese Lösung benutzt. – Hintswen

2

Sie könnten ein möchten Komma-separierter Wert, aber es wird nicht empfohlen. Warum nicht eine andere Tabelle zum Anzeigen von Beziehungen verwenden?

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

Dies sieht aus wie der perfekte Ort für eine Beziehungstabelle statt: Tabelle 1:

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

Tabelle 2 (der Relationstabelle)

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

Die zweite Tabelle verfolgt die Freundschaftsbeziehungen durch Verbinden von IDs aus Table1.