Mysql сложные запросы

DomainsManager
На сайте с 27.03.2010
Offline
24
1492

Приветствую всех!

Такая ситуация: есть пользователи, есть отношения между ними(дружба), есть журнал активности (общий, куда заносятся действия пользователя, например, запись в блог/загрузка фотографии).

В общем, нужно организовать аналог раздела "новости" ВКонтакте.

В связи с этим возникли вопросы. Как делать запросы к базе? Например, у пользователя 100 друзей и каждый из них совершил какое-то действие за текущий день.

Теоретически этот пользователь должен всё это увидеть. Долбить базу циклом в сто запросов по каждому из друзей и сохранять в кэш (чтобы не повторять этого больше)?

Сортировку по времени уже можно сдедать в ajax.

Может у кого-то есть опыт создания чего-то похожего?

Заранее спасибо.

WT
На сайте с 08.10.2010
Offline
17
#1

Ммм... а собственно в чем проблема?

Формируете список друзей пользователя(select * from where is_friend), затем приклеиваете данные о действиях, совершенных конкретным другом (либо просто склеиваете, либо через JOIN'ы)

А дальше в РНР обрабатываете полученный массив как душе угодно

За еду не работаю, зарабатываю здесь (http://www.sape.ru/r.amStvLXttk.php) Работа для ленивых - продвигай сайты автоматически (http://seopult.ru/ref.php?ref=1f6f897913cc593f)
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#2

Какая посещался и какой сервер?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
maldivec
На сайте с 04.11.2008
Offline
160
#3
DomainsManager:
Долбить базу циклом в сто запросов по каждому из друзей и сохранять в кэш

Это вообще лишнее. Все это делается одним запросом, например с JOIN нескольких таблиц (или даже без него), но это все зависит от структуры БД. Не видя структуры все это "вилами по воде".

[Удален]
#4

WebTih и maldivec верно говорят

select нужные поля новостей/действий

from новости/действия

where пользователь in (запрос на выборку айди фрэндов)

and/or прочие условия (на дату/время например, выбрать сегодняшние или по интервалу времени от последнего визита до текущего времени, что то в этом духе)

без структуры таблиц можно только так из пушки по воробьям пострелять, чем собственно и занимаемся :)

maldivec
На сайте с 04.11.2008
Offline
160
#5
alexpotemkin:
WebTih верно говорит
select нужные поля новостей/действий
from новости/действия
where пользователь in (запрос на выборку айди фрэндов)
and/or прочие условия (на дату/время например, выбрать сегодняшние или по интервалу времени от последнего визита до текущего времени, что то в этом духе)

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

Так что не видя БД и точной формулировки задачи тут нечего говорить :)

WT
На сайте с 08.10.2010
Offline
17
#6
alexpotemkin:
без структуры таблиц можно только так из пушки по воробьям пострелять, чем собственно и занимаемся

Приходится работать с той информацией, которую предоставили))

Мы с maldivec тоже не точный запрос предложили, а общую форму, опираясь на определенную(гипотетическую) структуру хранения данных.

[Удален]
#7

может лучше использовать продназначенные для этог осервера очередей для реализации подписок

Anamnado
На сайте с 08.02.2010
Offline
242
#8

надо брать разработчика БД и чтоб делал - а тут вас только запутают

описывать структуру это часа на 2-3 кто тут будет ?

ниче сложного для реляционных баз - на то они и придуманы - никаких циклов

DomainsManager
На сайте с 27.03.2010
Offline
24
#9

friendships: //При обоюдной дружбе status = 1; иначе status = 0; и это заявка на дружбу.

-fid int

-user_id int

-friend_id int

-date

-status enum

users

-uid int

-nickname varchar

... //и так далее

lastactivity

-lid int

-user_id int

-nickname varchar

-action enum //несколько разновидностей событий

-objekt_id int //ссылка на объект связанный с действием (например id фотографии,id человека с которым подружился пользователь и так далее)

-date

maldivec
На сайте с 04.11.2008
Offline
160
#10
DomainsManager:
friendships: //При обоюдной дружбе status = 1; иначе status = 0; и это заявка на дружбу.
-fid int
-user_id int
-friend_id int
-date
-status enum
users
-uid int
-nickname varchar
... //и так далее
lastactivity
-lid int
-user_id int
-nickname varchar
-action enum //несколько разновидностей событий
-objekt_id int //ссылка на объект связанный с действием (например id фотографии,id человека с которым подружился пользователь и так далее)
-date

:) мы, конечно, добрые саморитяне... но делать за вас работу тут вряд-ли кто-то будет.

Вам уже сказали - покопайте в сторону JOIN запросов (да и вообще сложных запросов, информации-то в сети полно), а сюда пишите что конкретно не получается, тогда может и помогут :)

Иначе вам в раздел "Работа для вебмастера" для поиска исполнителя.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий