Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
52 / 52 / 39
Регистрация: 15.11.2014
Сообщений: 696
MySQL

Система друзей/подписчиков на php

22.03.2016, 17:53. Показов 4557. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно появилась необходимость создания системы друзей/подписчиков на сайте. Но я не совсем понимаю как организовать бд под эту систему.
У меня были идеи сделать одну лишь таблицу в которой указываются: получатель заявки, отправитель заявки в друзья, статус (подписчик/друг).
Или второй вариант.
Под каждого юзера добавляется таблица со списком юзеров-подписчиков/друзей. Первой колонкой в каждой таблице является имя (никнейм) юзера и второй колонкой является статус (друг/подписчик).
Скажите пожалуйста, как все таки чаще всего реализуется система друзей/подписчиков на сайтах! Используется что то подобное о чем я поразмышлял или как то по другому?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.03.2016, 17:53
Ответы с готовыми решениями:

Система друзей и ее реализация php mysql
Всем привет, кто может мне помочь с реализацией система друзей на сайте? Сколько таблиц надо сколько полей для нее, как реализуется...

совет нужен! система друзей на сайте
Добрый вечер, дорогие форумчане! решил обозначить (наметить) систему друзей на сайте, и соответственно возникла пара вопросов. конкретнее...

Как создать систему друзей php mysql
Как создать систему друзей, то-есть: Отправляем заявку в друзья пользователю, а он подтверждает или нет. И так наоборот, пользователь...

7
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
22.03.2016, 18:18
Вариант 1:
user_id subscriber_id status (1 - друг, 0 - подписчик)
120
231
451
Вариант 2:
(друзья через запятую, статус (друг/подписчик) после подчёркивания)
user_id subscribers
1 2_0,3_1,4_0,5_1
2 3_0,4_1
Наверняка есть и другие варианты, но я бы выбрал 1-ый.
1
52 / 52 / 39
Регистрация: 15.11.2014
Сообщений: 696
23.03.2016, 21:54  [ТС]
Спасибо большое!
Но у меня есть еще вопрос.

Например есть таблица, в которой subscriber - человек, который подает заявку на дружбу; user - человек, который получает эту заявку и status - кем приходится subscriber user'у (подписчик/друг).
 
id
1
То есть некоторое "направление" заявки - от subscriber'а к user'у.

Но сложна ситуация при принятии заявки в друзья...

В этом случае должен поменяться status на friend.
Сложность заключается в следующем.

Вот когда юзер является к другому подписчиком (subscriber'ом) сохраняется "направление" заявки в друзья- от одного юзера к другому. И когда нужно вывести на экран всех подписчиков проблем нет, потому что нужно просто вывести получателя заявки.

Но когда заявка принята, юзеры становятся друзьями и это "направление" стирается ведь в случае, о котором я описал выше один юзер является подписчиком другой нет. А когда становятся друзьями, то они друг другу являются друзьями. Направление заявки исчезает. По крайней мере должно, но не все так просто...

Возможно я не понятно объяснил словесно, поэтому попробую в форме таблицы (если получится потому что не рисовал таблицы на форуме)

Допустим есть таблица

idsubscriberuserstatus
1user1mikhailshellsubscriber
2user2mikhailshellsubscriber
3mikhailshelluser3subscriber
4user4mikhailshellsubscriber
5mikhailshelluser5subscriber
6user6mikhailshellsubscriber
В этом случае понятно "направление" заявки. Например user1 -> mikhailshell, user2 -> mikhailshell, mikhailshell -> user3 и т.д.

И допустим если нужно вывести всех подписчиков mikhailshell, то есть все строки ГДЕ `user` = "mikhailshell" И `status` = "subscriber";

Выведет
user1
user2
user4
user6

И вторая ситуация где во всех строках status = friend.
idsubscriberuserstatus
1user1mikhailshellfriend
2user2mikhailshellfriend
3mikhailshelluser3friend
4user4mikhailshellfriend
5mikhailshelluser5friend
6user6mikhailshellfriend
Мне нужно вывести все всех друзей.
Но если двигаться по той же схеме (ГДЕ user = "mikhailshell") то выведутся те же самые люди что и в первом случае. А нужно чтобы было все.

Подскажите пожалуйста, что нужно сделать чтобы решить данную проблему!
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
23.03.2016, 23:37
Mikhail Shell, вижу 2 варианта:
1. WHERE (subscriber = 'mikhailshell' OR user = 'mikhailshell') AND status = 'friend'

2. Дублирование записей. Если user1 и user2 друзья, то делаем 2 записи:
id subscriber user status
1 user1 user2 friend
2 user2 user1 friend
1
Заблокирован
24.03.2016, 04:39
Учи Нормальную форму Бойса-Кодда.
0
52 / 52 / 39
Регистрация: 15.11.2014
Сообщений: 696
24.03.2016, 11:37  [ТС]
Jodah, спасибо за идею.
Допустим я выбираю вариант номер 1 WHERE (subscriber = 'mikhailshell' OR user = 'mikhailshell') AND status = 'friend'.

Ситуация: нужно вывести всех друзей юзера mikhailshell. С помощью php естественно. Первой строкой mysql_fetch_array допустим у нас получится subscriber -> mikhailshell, user -> user1, status -> friend.
То есть
PHP
1
2
3
4
5
6
7
$row = mysql_fetch_assoc($some_sql_code);
$row['subscriber'] = "mikhaishell";
$row['user'] = "user1";
$row['status'] = "friend";
/*
цикл вывода
*/
И мне нужно понять какой элемент массива вывести чтобы в результате вывелись только имена друзей юзера mikhailshell.

И еще

Не по теме:


Как нарисовать таблицу в сообщении на этом форуме? Просто в предыдущем моем сообщении мне модератор нарисовал таблицу, а сам я не знаю как разделить таблицу на ячейки.

0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
24.03.2016, 12:05
Mikhail Shell, вывести всех друзей?

PHP
1
2
3
4
5
6
$firends = mysql_query("... WHERE (subscriber = 'mikhailshell' OR user = 'mikhailshell') AND status = 'friend'");
while($row = mysql_fetch_assoc($friends))
{
    $friend = $row['user'] == 'mikhailshell' ? $row['subscriber'] : $row['user'];
    echo 'Друг: ' . $friend . '<br>';
}

Не по теме:


Немного кривовастенько... но работать должно. :)

1
52 / 52 / 39
Регистрация: 15.11.2014
Сообщений: 696
24.03.2016, 13:10  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
PHP
1
$friend = $row['user'] == 'mikhailshell' ? $row['subscriber'] : $row['user'];
Это же условие типа следующего?
PHP
1
2
3
4
5
6
if($row['subscriber'] != 'mikhailshell'){
echo $row['subscriber'];
}
else{
echo $row['user'];
}
Спасибо проблема решена. Но мне еще нужна сортировка всех друзей по алфавиту. В запросе мы должны написать что то вроде
SQL
1
ORDER BY `поле`
Но по какому полю сортировать если уже php-код "выбирает" что вывести.
Или как-то по другому можно отсортировать по алфавиту имена?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.03.2016, 13:10
Помогаю со студенческими работами здесь

Вывод аватаров друзей из базы запросом php
Здраствуйте. Прошу у Вас помощи Требуется при помощи Php запроса вывести аватары друзей юзера имеется база данных с таблицами...

Нужно реализовать скрипт друзей на php, по моему примеру
Всем привет! Можете подсказать скрипт, который бы делал следующее: 1) Нажимаешь на кнопку, добавить в друзья 2) После нажатия на...

php узнаем кол-во подписчиков на rss
Можно ли получить число подписчиков на rss через php без как каких либо сервисов вроде feedburner ?

Список друзей на PHP
Доброго времени суток, программисты! Дайте совет: как организовать список друзей для сайта, систему добавления\удаления\разрешения прав...

PHP и поисковые система
Здравствуй всем. Хочу сделать одну ххх знает как назвать ее.. Сейчас попробую объяснить. У меня есть одностраничный сайт. Например...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru