вид хранения данных, поиск

Stalone

Новичок
вид хранения данных, поиск

Пытаюсь сделать что-то вроде *социальной сети*,
Хочу сделать возможность поиска по интересам пользователя (любимой музыки и т.д.), вида:
"Интерес один, второй интерес, интересы ещё, много"

Подскажите пожалуйста, в каком виде хранить эти данные, и потом искать людей по ним?

Подойдет ли FULLTEXT для этого? Или какие есть другие варианты, что лучше?
 

Pigmeich

Новичок
Stalone
предлагаю социальную сеть не делать.

Храниться это либо в таблице вида: (user_id, interest), либо (user_id, interest_id), в зависимости от объема таблиц.
 

Stalone

Новичок
Pigmeich
Почему нет? Она идейная

Пользователь добавляет интересы вписывая их через textarea разделяя запятыми, удаляет там же - backspace'ом).
А если пользователей будет много тысяч? Интересов у них будет ещё больше, в разы, это нормально? И как потом удалять интерес, когда пользователь его стёр из списка, т.е. как узнать что-пропало, короче мне кажется это геммор, нет?

Почему не сделать в таблице поле interests, где они будут все, а при поиске использовать fulltext search?
 

Pigmeich

Новичок
потому что fulltext хуже записей на каждый отдельный интерес. В MySQL есть средства профилирования - можешь протестировать.

Алгоритм изменения интересов (тьфу на вас всех, надо уже деньги просить) на псевдокоде:
1. Разбираем строчку на массив из интересов.
2. SQL: DELETE интересов которых нет в массиве.
3. SQL: добавляем интересы со словами IGNORE.
4. Все.

Небольшой архитектурный изыск:
вставляем интерес через хранимую функцию. Функция, в зависимости от предпочтений может просто сохранять текст, а может искать по таблице интересов и если интереса там нет - добавлять новый.

Выборка из базы самая обычная, по user_id. Поиск, соотвественно тоже. Групировочное поле с колличеством совпадающих интересов прилагается.
 

Фанат

oncle terrible
Команда форума
интересно, а если он напишат такое же развернутое обоснование совету не делать социальную сеть вообще? %)
 
Сверху