Я застрял в запросе SQL.Речь идет о получении сообщений, показывающих пользователя, которым поделились люди, связанные с ним.
У меня есть таблица, которая показывает связь между двумя пользователями.Между двумя пользователями может быть 5 типов связи:
- друзья;
- родственники;
- коллега;
- одноклассник;
- знакомства.
Любые два пользователя могут быть связаны более чем в одной взаимосвязи, поэтому в таблице 7 столбцов, а именно:
first_user_id (int)
second_user_id (int)
friends (bool)
relative (bool)
colleague (bool)
classmate (bool)
acquaintance (bool)
Теперь пользователь может поделитьсяпост, который может быть мыслью, фотографией, видео или чем-то еще, но сейчас давайте рассмотрим, может ли он поделиться своей мыслью.Он может установить конфиденциальность на своем посту, он может указать, что только его родственники или друзья смогут получить доступ к посту.Теперь по этой причине у меня есть три таблицы.
Shared
- все общие элементы:
id (int auto_incr p_key)
;
type (text)
- тип поста, который находится в этом ряду, например.это может быть 'thought'
, или 'photo'
, или 'video'
.на данный момент это будет 'thought'
;
item_id (int)
- id
элемента, который нужно искать в соответствующей таблице, на данный момент это таблица thought
;
shared_by (int)
- id
пользователя, который поделился этим элементом
time (datetime)
- дата / время, когда была опубликована мысль
Thought
- это таблица для хранения всех элементов мышления, будут отдельные таблицы для хранения каждого типа элемента, например, photo
,video
и т. Д.:
Shared_with
:
post_id (int p_key)
- здесь будет вставлено id
значение таблицы shared
public (bool)
- если это значение равно true, это общедоступная запись и может быть доступно всем
friends (bool)
- если true, эта запись можетподелиться с людьми, которые дружат с тем, кто его опубликовал
relative (bool)
- то же, что и above для родственников
colleague (bool)
- то же самое для коллег
classmates(bool)
- то же самое для одноклассников
acquaintance (bool)
- то же самое для знакомства
Теперь проблема в том, что я хочу получить 20 лучших постов, которые являются либо общедоступными, либо общими для людей.подключен к пользователю.Пользователь должен видеть только тот пост, к которому он имеет право, и который находится в его списке контактов.Можете ли вы предложить мне, как это можно сделать с помощью одного или нескольких запросов SQL.Также предложите некоторые улучшения в схеме.