Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2012, 18:58   #1
Programmer_St
Пользователь
 
Регистрация: 23.04.2012
Сообщений: 43
По умолчанию добавление и удаление друзей на php

Не так давно начал изучать php. И решил написать небольшую соц.сеть для тренировки.Вот столкнулся с такой проблемой, как добавление друзей и вывод из на экран.Хотя со вторым я практически разобрался.
Так вот ближе к делу.
Не могу понять как организовать таблицу friends чтобы делать там отметки о друзьях.Я читал что нужно сделать два поля для айдишников и поля для статуса и еще я нашел что просто в таблице пользователей сделали поле frends и туда через пробел заносили айдишники друзей.Хотелось бы услышать мнение о каждом из вариантов ну и если есть возможность посмотреть на примере.Спасибо!
Programmer_St вне форума Ответить с цитированием
Старый 03.10.2012, 23:39   #2
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

Оба способа имеют право на жизнь, надо смотреть как связка друзей происходить будет - если я добавил друга, а он меня нет, подумай как об этом сообщить мне, другу, посетителю который зашел на мою страничку, посетителю который зашел на страницу друга. Сколько надо сделать запросов к БД в каждом из случаев и сколько нужно будет прошерстить строк в БД, когда у тебя будет например 10000 пользователей.
Mortimoro вне форума Ответить с цитированием
Старый 04.10.2012, 00:39   #3
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Имеет право на жизнь только первый способ !!
Таблица friends(user_id, friend_id)
Приглашения пишете в отдельную таблицу invites. Когда подтверждают дружбу, делает 2 записи в таблицу friends (для каждого пользователя)
Cronos20 вне форума Ответить с цитированием
Старый 04.10.2012, 07:57   #4
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

Ну зачем же так категорично - только первый?

Если он не собирается делать какие-либо связки типа "друзья друзей Александра Друзя", а нужно только получить список всех друзей конкретного человека и на этом функциональность ограничивается, то при числе пользователей скажем в 10000:

Код:
SELECT `friend_id` FROM `friends` WHERE `user_id`=$id
способ 1й - надо прошерстить все записи в таблице, а так как на каждую пару пользователей у нас две записи, то размер базы увеличивается экспоненциально (например для 4 человек, которые все дружат между собой, получится 12 записей в общей сложности, а когда прийдет 5й, который дружит со всеми четырьмя, записей станет 20, то есть уже в 4 раза больше, чем пользователей).

Код:
SELECT `friends` FROM `users` WHERE `user_id`=$id LIMIT 1
способ 2й - проходим по строкам до тех пор, пока не найдем нужную и все, запись со всеми друзьями получена, поиск прекращаем. Особенно актуально, если нужный ID окажется где-то в начале таблицы.

можно объединить оба способа и получим отдельную таблицу friends(user_id, friend_array), где friend_array - сериализованный массив с айдишками друзей.

Так что все зависит от конкретных целей и задач.
Mortimoro вне форума Ответить с цитированием
Старый 04.10.2012, 11:01   #5
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Даже комментировать не буду второй способ
1. Читайте про нормализацию данных
2. Про индексирование.
3. Удобство работы (например удаление друзей и построение связей между многими друзьями ... друзья друзей и пр.). Я даже не говорю про всякие join
4. А если нужно еще добавить категорию друзей (одноклассники, коллеги) и прочие вещи?
Одним словом не предлагайте всякую ерунда, проиндексированная таблица с 2 полями типа int выдержит хоть миллион, хоть миллиард записей (проверено лично на живых проектах). Одним словом второй способ никогда не выиграет в производительности, ни при 2 юзерах, ни при 1000000

Последний раз редактировалось Cronos20; 04.10.2012 в 11:12.
Cronos20 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление друзей в Моем мире (mail.ru) Robin_ Работа с сетью в Delphi 3 06.04.2012 11:45
Добавление/Удаление CrazyN00b Помощь студентам 0 28.11.2010 17:38
Удаление/добавление на С++. Serror Фриланс 6 21.10.2009 09:35
Удаление/добавление. Serror Общие вопросы C/C++ 3 19.10.2009 09:41
Удаление и добавление строки. Serror Общие вопросы C/C++ 6 11.10.2009 18:59