Я хочу сохранить массив в записи.
Таблица 1:
ID, имя, друзья (друзья должны быть массивом) 1, Билл, 2 и 3 2, Чарльз, 1 и 3 3, Клэр, 1
Я хочу иметь возможность выполнить поиск следующим образом:
SELECT * FROM Table1 WHERE Friends = '3'
найти всех, у кого есть Клэр, в списке друзей
Если у вас нет действительно веских оснований для этого, вы должны поддерживать нормализацию данных и сохранять отношения в другой таблице. Я думаю, что, возможно, вы ищете следующее:
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 | имя | id | user_id | friend_id | + ---- + --------- + ---- + --------- + ----------- + | 1 | Билл | 1 | 1 | 3 | | 2 | Чарльз | 2 | 2 | 3 | + ---- + --------- + ---- + --------- + ----------- + 2 ряда в наборе (0,00 сек)
Это выглядит как идеальное место для таблицы отношений: Таблица 1:
ID, Name 1, Bill 2, Charles 3, Clare
Таблица 2 (таблица отношений)
ID, FriendID 1, 2 1, 3 2, 1 2, 3 3, 1
Вторая таблица отслеживает отношения друзей, подключая идентификаторы из Таблицы 1.
Возможно, вам понадобится значение, разделенное запятыми, но это не рекомендуется. Почему бы не использовать другую таблицу для показа отношений?
Table2 ---------------------- PARENT_ID | FRIEND_ID ---------------------- 1 | 2 1 | 3 2 | 1 2 | 3 ----------------------