Как сохранить список пользователей, и дать пользователям знать, что они в этом списке - PullRequest
0 голосов
/ 30 ноября 2009

Я создаю сайт, где пользователь может добавлять людей в свой «список». Этот список принадлежит пользователю, но мне интересно, каков наилучший способ сохранить / извлечь / перебрать этот список в функции, чтобы показать людям, которые есть в списке, что они там и кто его создал.

Так что, как только список имен пользователей создан, я бы предположил сохранить его в поле таблицы mysql, а затем написать функцию, которая будет выполнять поиск в этой таблице, чтобы найти любые списки, которые влияют на пользователя, вошедшего в систему.

У меня вопрос в два раза. Во-первых, если предположить, что список содержит только a-z 0-9, дефисы и подчеркивания (без пробелов в именах пользователей, но разделенные пробелами), какой тип полей лучше всего подходит для хранения, как в MySQL. Во-вторых, какой самый лучший / быстрый способ поиска имени пользователя во многих списках?

Ответы [ 3 ]

1 голос
/ 30 ноября 2009

Если ваш список содержит ссылки на других участников (у каждого человека есть свой собственный список), вам лучше всего создать данные в какой-либо таблице MySQL (так как MySQL оптимизирован для такого рода вещей), например, вы бы нужно 2 простые таблицы, таблица одна (пользовательская таблица) будет иметь 2 столбца. ID (INT или BIGINT), Имя пользователя (VARCHAR).

Тогда ваша вторая таблица (пользовательские ссылки) будет иметь 2 записи, в зависимости от того, выполняется ли связывание двунаправленно или однонаправленно, см. Ниже.

Двунаправленно : таблица будет иметь 2 столбца: Пользователь1 (INT или BIGINT), Пользователь2 (INT или BIGINT). Чтобы получить список, просто запросите в этой таблице все записи, в которых идентификатор пользователя указан либо в User1, либо в User2.

Однонаправленно : таблица будет иметь 2 столбца: Владелец (INT или BIGINT), Персона (INT или BIGINT). Чтобы получить список для пользователя, просто запросите его для всех записей, принадлежащих такому пользователю.

Разница между ними заключается в том, что если двунаправленно добавить вас в свой список, я автоматически попаду в ваш список. При удалении Однонаправленно это означает, что вы должны добавить меня в свой список, чтобы я отображался в вашем списке, даже если он есть в моем списке.

1 голос
/ 01 декабря 2009

Varchar, индексация и дополнительное кэширование.

Вы создаете пользовательскую таблицу с полем username и userid. Затем создайте таблицу user_relation, где вы объединяете идентификаторы пользователей, чтобы у вас были совпадения. Разместите индексы по всем отношениям с внешними ключами. Это должно дать довольно приличную производительность:)

edit некоторая дополнительная информация для настройки

Таблица: Пользователь UserID - Int (8) - первичный ключ, автоинкремент Имя - Варкар (30) Адрес электронной почты - Varchar (90) - Уникальный

Таблица: отношение пользователей ID - Int (8) - первичный ключ, автоинкремент UserID_Source - Int (8), индекс (это пользователь) UserID_Friend - Int (8), индекс (это друг / отношение пользователя)

Таким образом, вы можете легко хранить отношения с определенным пользователем.

Чтобы получить некоторые результаты, используйте запрос вроде:

SELECT `User`.*, `User`.`UserID` AS `UserID_Source`
FROM   `User`
WHERE  `User`.`UserID` = `user_relation`.`user_id_source`

Вы можете расширить запрос с помощью JOIN для прямой выборки соответствий отношений или использовать для этого другой запрос;)

1 голос
/ 30 ноября 2009

Лучшим вариантом будет хранить каждое имя в отдельной строке.

...