[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Добавление друзей в учетную запись
Страницы: 1, 2
Rupert85
На php&mysql пишу сайт. На сайте разная информация и есть возможность зарегистрироваться. У каждого пользователя может быть один или несколько друзей, или не быть их совсем. Подскажите, как реализовать добавление друзей в учетную запись пользователя? Т.е. есть таблица Users предположим, в таблице идут записи всех пользователей. В голову приходит только создавать отдельную таблицу с друзьями для каждой записи. Только как её реализовать? Всмысле имена полей, взаимодействие с таблицей Users и прочее.
Bezdna
Добавляешь поле id_friends, куда заносишь id друга.
Rupert85
Bezdna, ситуация усугубляется тем, что друзей может быть несколько или не быть совсем. Как их записать в одно поле, а потом перебирать этот массив?
VolCh

таблица users
id | .....

таблица friends
user_id | friend _id

Получить всех друзей юзера %USER%:

SELECT friend_id FROM friends WHERE user_id=%USER%


Получить всех у кого %USER% в друзьях

SELECT id FROM friends WHERE friend_id=%USER%



_____________
qpayct
Чтобы перебирать массив, его нужно сначала создать. К примеру запись нового друга добавляй со знаком разделителем на конце (к примеру "&"), потом дели строку на массив
$friend=explode("&",$str);
и после перебирай массив
foreach ($friend as $i => $val) {
echo $val."<br/>";
}
VolCh
qpayct, что-то мне кажется не оптимально это, дря разборок данных у нас мускул есть wink.gif


_____________
qpayct
Volch, a мне показалось, как раз не оптимально держать отдельную таблицу всех друзей кто чей... Или это ты так пошутил на ночь глядя?
glock18
qpayct
что-то мне подсказывает, что он не пошутил. и он прав.
qpayct
вот как?
тоесть вы утверждаете, что если допустим есть таблица юзеров(к примеру 100 акков), которые все друзья друг друга(тобишь придётся завести таблицу друзей в 100*100 записей) и это будет работаь быстрее, чем если добавить к каждому акку одно поле(стринг) в котором будут перечислены все друзья?
unsure.gif
vagrand
qpayct
1. В описанном тобой случае вариант с отдельной таблицей идеально подходит для поиска френдов по нейму одним запросом. В твоем же случае надо будет выбрать ID всех френдов, а затем по ID инейму искать друзей.

2. Я слабо представляю как в твоем случае можно организовать поиск фендов френдов.

3. Так же возникнет проблема с таким элементарным действием как узнать находиться ли user_1 в списке френдов у user_2

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
VolCh
qpayct, естественно быстрее wink.gif Не говоря об универсальности, расширяемости и прочем.


_____________
qpayct
да верно.
только вот таблиц получается много...
waldicom
Цитата (qpayct @ 25.12.2009 - 20:33)
да верно.
только вот таблиц получается много...

Одна дополнительная таблица - это уже много?

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
qpayct
одна то одна, зато КАКАЯ!!!
VolCh
qpayct
какая? из двух целочисленных полей? Или, думаешь, твой вариант с текстовым полем, где хранить id друзей с разделителем займёт меньше места? Не говоря о скорости поиска операций типа "у кого я в друзьях?" -
SELECT * FROM users WHERE friends LIKE '%|@my_id|%'
думаешь быстрее
SELECT * FROM users JOIN friends ON users.id = friends.user_id WHERE friends.friend_id = @my_id
даже без индексов?

_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.