Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Круговорот пользователей, Логика работы 
:(
    Опции темы
N_Ghost
Дата 11.10.2011, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.6.2008

Репутация: нет
Всего: нет



Привет всем.
Есть таблица с пользователями, id, name, age и тд. На страницу выводится один пользователь, и кнопка, добавить, или следующий.
Логика работы должна быть такая, один пользователь, скажем с id 1, просматривает других пользователей.
Если первый пользователь, добавляет второго пользователя, то он добавляеться другую таблицу, 
типа друзья, и в первом списке больше не показывается.
Так же, пользователь может заблокировать другого пользователя, и его тоже больше не должно 
быть в списке. Там еще много наворотов, типа выбор по параметрам, странам, случайный вывод.. 
Но это пока не сильно интересует.
Интересует именно логика, как и где лучше хранить параметры выбранных-удаленных пользователей?

Пока на ум приходит два варианта, создать еще одну таблицу, и в ней хранить user1, user2. 
Если есть запись 1 -> 2, 1 -> 3, 1 -> 5. То этих пользователей не показывать.
Не много смущает что что эта таблица очень быстро вырастет до гигантских размеров, и делать 
в ней перебор будет не очень хорошо. К тому же не совсем понятно как доставать пользователей 
из первой таблицы. Достал, проверил, следующий? Не очень логично.

Второй вариант, создать таблицу user, users, и хранить там номер пользователя, номера 
пользователей, по типу 1 -> array(2,3,5), и просматривать этот массив на предмет соответствия.
Массив в память, и базу уже не дергать. Боюсь за размеры массива. Который будет висеть в памяти.
Но проблема в принципе та же, что и в первом варианте, как доставать пользователей? Перебирать 
все возможные варианты, пока не найдем нужного? А если нужный будет сотым?

Может кто сталкивался с похожей ситуацией, помогите советом, как лучше организовать структуру.
PM MAIL   Вверх
Absinthe
Дата 11.10.2011, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 1
Всего: 11



N_Ghost, почему эта тема в профи?

Тебе нужны друзья и банлист? Мог вопрос одним предложением задать вместо этого месива текста?  smile 
Дополнительная таблица:

id, user_id, target_id, action

targer_id - это пользователь, которого френдит или блокирует пользователь user_id.
action может иметь значения 'friend' и 'blocked'

Если используешь постгрес, то вместо этого можно прямо в твоей основной таблице добавить поля blocked и friends типа int[] и складывать в них id.

Это сообщение отредактировал(а) Absinthe - 11.10.2011, 12:13
PM MAIL   Вверх
N_Ghost
Дата 11.10.2011, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.6.2008

Репутация: нет
Всего: нет



Absinthe, мне нужна логика, а не код.

Там не друзья, а не много сложнее. Но это не проблема.
Основная проблема, что для вывода случайного человека, придется бегать по всей второй таблице. Сравнивать, и только потом, или выводить, или искать следующего юзера.
Я боюсь что это может очень не плохо сказаться на нагрузке.

Но, для полного счастья, надо еще проверять, чтоб пользователь не показывался 2 раза в одном круге, это уже конечно в сессию. Которая при новом поиске, обнуляется, и все по кругу.

Вот я и спрашиваю, как рациональней такое реализовать.
PM MAIL   Вверх
Absinthe
Дата 11.10.2011, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 1
Всего: 11



Цитата

Основная проблема, что для вывода случайного человека, придется бегать по всей второй таблице. Сравнивать, и только потом, или выводить, или искать следующего юзера.
Я боюсь что это может очень не плохо сказаться на нагрузке.
Не понял проблемы. На чем основано "или"?

Цитата

Но, для полного счастья, надо еще проверять, чтоб пользователь не показывался 2 раза в одном круге, это уже конечно в сессию.
 Какую нафиг сессию? о_О

Сюда свой вопрос напиши в минимизированном и полном виде.
PM MAIL   Вверх
N_Ghost
Дата 11.10.2011, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.6.2008

Репутация: нет
Всего: нет



Цитата(Absinthe @ 11.10.2011,  11:35)
Цитата

Основная проблема, что для вывода случайного человека, придется бегать по всей второй таблице. Сравнивать, и только потом, или выводить, или искать следующего юзера.
Я боюсь что это может очень не плохо сказаться на нагрузке.
Не понял проблемы. На чем основано "или"?

Цитата

Но, для полного счастья, надо еще проверять, чтоб пользователь не показывался 2 раза в одном круге, это уже конечно в сессию.
 Какую нафиг сессию? о_О

Сюда свой вопрос напиши в минимизированном и полном виде.

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

PM MAIL   Вверх
Absinthe
Дата 11.10.2011, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 1
Всего: 11



Цитата

Причем, часть номеров отсечь навсегда.
 Их не нужно отсекать. Их нужно просто не использовать при выборке. JOIN.

Цитата

А вторую часть, только до перезагрузки страницы, или выбора новых параметров поиска.
 Тогда сессии.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.