Строка запроса Mysql для социального приложения для обмена фотографиями, такого как Instagram

Я занимаюсь разработкой платформы для обмена фотографиями. Приложение позволяет опубликовать фотографию, а другие могут понравиться или оценить фотографию. Пользователи могут следить друг за другом и видеть фотографии, которыми делятся их «подписчики», как Instagram.

 #user_tbl
id | name | number
-------------------
1 | Dan  | 0209
2 | Sam  | 2854
3 | Dave | 8123
4 | Alex | 5600

#photo_tbl
id | userid | path
-------------------
1 |  3     | dave-dog.jpg
2 |  1     | dans-cat.png
3 |  4     | alex-bird.jpg
4 |  2     | sam-fish.jpg


#friendship_tbl
id | actor | target
--------------------
1 |  2    | 1   // Sam is following Sam
2 |  2    | 4   // Sam is following Alex
3 |  1    | 3   // Dan is following Dave
4 |  4    | 2   // Alex is following Sam

#activities_stream_tbl
id | photoid | userid | context               | date
----------------------------------------------------------
1 |   3     |  4     | add-new-photo         | 10/10/2015
2 |   1     |  3     | add-new-photo         | 12/10/2015
3 |   3     |  2     | Sam-share-Alex-photo  | 15/10/2015
4 |   4     |  2     | add-new-photo         | 20/10/2015
6 |   1     |  1     | Dan-like-Dave-photo   | 21/10/2015

#User_table содержит основную информацию о пользователе, в то время как #photo_tbl держать имя и путь к фотографии, предоставленной пользователем. в #friendship_tbl это связь между пользователями. "actor" столбец — это идентификатор пользователя, который делает следующее, пока "target" столбец — это идентификатор пользователя, за которым следят.

У меня сейчас проблема с написанием строки запроса, чтобы вытащить фотографии USERX и фотографии других пользователей USERX отслеживает и группирует их по «photoid» в activity_stream_tbl и ORDER BY «date» activity_stream_tbl.

Я буду рад, если кто-нибудь сможет мне помочь, покажите мне лучший способ структурирования БД, спасибо.

1

Решение

чтобы вытащить фотографии USERX, вы можете построить свой SQL как

select PATH
from user_tbl as a inner join photo_tbl as b
on a.id = b.user_id
and a.name = 'userx'

и вытащить фотографии других пользователей, за которыми следит USERX, можете написать

select path
from photo_tbl as a
where a.userid in (select target from friendship_tbl as x inner join user_tbl as y on x.actor = y.id and y.name = 'user')

Вы можете объединить два приведенных выше результата, если хотите.

например:

select PATH
from user_tbl as a inner join photo_tbl as b
on a.id = b.user_id
and a.name = 'userx'
UNION
select path
from photo_tbl as a
where a.userid in (select target
from   friendship_tbl as x
inner  join user_tbl as y
on   x.actor = y.id and y.name = 'user')
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]