| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Для профи > Круговорот пользователей |
| Автор: N_Ghost 11.10.2011, 11:43 |
| Привет всем. Есть таблица с пользователями, id, name, age и тд. На страницу выводится один пользователь, и кнопка, добавить, или следующий. Логика работы должна быть такая, один пользователь, скажем с id 1, просматривает других пользователей. Если первый пользователь, добавляет второго пользователя, то он добавляеться другую таблицу, типа друзья, и в первом списке больше не показывается. Так же, пользователь может заблокировать другого пользователя, и его тоже больше не должно быть в списке. Там еще много наворотов, типа выбор по параметрам, странам, случайный вывод.. Но это пока не сильно интересует. Интересует именно логика, как и где лучше хранить параметры выбранных-удаленных пользователей? Пока на ум приходит два варианта, создать еще одну таблицу, и в ней хранить user1, user2. Если есть запись 1 -> 2, 1 -> 3, 1 -> 5. То этих пользователей не показывать. Не много смущает что что эта таблица очень быстро вырастет до гигантских размеров, и делать в ней перебор будет не очень хорошо. К тому же не совсем понятно как доставать пользователей из первой таблицы. Достал, проверил, следующий? Не очень логично. Второй вариант, создать таблицу user, users, и хранить там номер пользователя, номера пользователей, по типу 1 -> array(2,3,5), и просматривать этот массив на предмет соответствия. Массив в память, и базу уже не дергать. Боюсь за размеры массива. Который будет висеть в памяти. Но проблема в принципе та же, что и в первом варианте, как доставать пользователей? Перебирать все возможные варианты, пока не найдем нужного? А если нужный будет сотым? Может кто сталкивался с похожей ситуацией, помогите советом, как лучше организовать структуру. |
| Автор: Absinthe 11.10.2011, 12:08 |
| N_Ghost, почему эта тема в профи? Тебе нужны друзья и банлист? Мог вопрос одним предложением задать вместо этого месива текста? Дополнительная таблица: id, user_id, target_id, action targer_id - это пользователь, которого френдит или блокирует пользователь user_id. action может иметь значения 'friend' и 'blocked' Если используешь постгрес, то вместо этого можно прямо в твоей основной таблице добавить поля blocked и friends типа int[] и складывать в них id. |
| Автор: N_Ghost 11.10.2011, 13:24 |
| Absinthe, мне нужна логика, а не код. Там не друзья, а не много сложнее. Но это не проблема. Основная проблема, что для вывода случайного человека, придется бегать по всей второй таблице. Сравнивать, и только потом, или выводить, или искать следующего юзера. Я боюсь что это может очень не плохо сказаться на нагрузке. Но, для полного счастья, надо еще проверять, чтоб пользователь не показывался 2 раза в одном круге, это уже конечно в сессию. Которая при новом поиске, обнуляется, и все по кругу. Вот я и спрашиваю, как рациональней такое реализовать. |
| Автор: Absinthe 11.10.2011, 13:35 | ||||
Сюда свой вопрос напиши в минимизированном и полном виде. |
| Автор: N_Ghost 11.10.2011, 16:19 | ||||||
Хорошо, пойдем по порядку. Мне нужно отсечь номера пользователей с которыми уже что то сделали. Причем, часть номеров отсечь навсегда. А вторую часть, только до перезагрузки страницы, или выбора новых параметров поиска. Все это дело на mysql. |
| Автор: Absinthe 11.10.2011, 20:02 | ||||
|