как получить уведомление из базы данных с различными типами уведомлений - PullRequest
2 голосов
/ 07 января 2012

Я работаю в системе уведомлений, как в Facebook.

моя структура базы данных

enter image description here

Я сделал type_id, например, тип уведомления.[комментарии на стене, запись на стене и т. д.]

проблема в том, как мне получить данные из уведомления, например, используя временную метку, я могу получить данные в соответствии с обновленной датой или временем, но все же после получения типа.Как сопоставить тип с другими таблицами, необходимыми для отображения результатов, таких как случайное уведомление в Facebook.Может ли кто-нибудь помочь мне с запросом к базе данных.

как для типа

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

настенный пост - мне нужно получить данные со стеныстолы сообщений и уведомлений

как объединить их в соответствии с отметкой времени позже и получить результаты в соответствии с этим

, например

rahul, опубликовано на вашей стене 2 часа назад

ritu прокомментировал ваше сообщение 1 ч. Назад

Может ли кто-нибудь помочь ??

Ответы [ 2 ]

3 голосов
/ 07 января 2012

Я бы не стал делать все это одним запросом.Я бы предпочел сделать несколько небольших простых запросов, по одному для каждого типа объекта (запись на стене, комментарий и т. Д.), Затем собрать результаты в коде PHP и отправить их клиенту.

Не переусердствуйте, естьмного сложностей уже.: -)

Примеры запросов:

SELECT p.*, n.*
FROM notifications n
INNER JOIN wall_posts p ON p.id = n.item_id
WHERE n.type_id = 'wall_post' AND n.is_seen = 0;
ORDER BY time_stamp DESC
LIMIT 10;

SELECT c.*, n.*
FROM notifications n
INNER JOIN wall_comments c ON c.id = n.item_id
WHERE n.type_id = 'wall_post' AND n.is_seen = 0;
ORDER BY time_stamp DESC
LIMIT 10;
1 голос
/ 07 января 2012

Это зависит от того, как данные структурированы в других ваших таблицах. Если он похож (или, по крайней мере, может быть обобщен подобным образом), то вы можете использовать UNION, подобный этому

SELECT * FROM
  ( 
    SELECT date,title,summary FROM notifications 
      INNER JOIN wall_comments ON (item_id=item_id AND type_id='wall_comments')
      WHERE user_id=X
  ) UNION
  ( 
    SELECT date,title,summary FROM notifications 
      INNER JOIN wall_posts ON (item_id=item_id AND type_id='wall_posts')
      WHERE user_id=X
  ) UNION 
  ( etc..
  )
ORDER BY date desc

Возможно, вы захотите добавить другие пункты в ваши подпункты WHERE, чтобы ограничить подзапросы. Если вы действительно находите проблемы с производительностью, вы можете рассмотреть вопрос о денормализации ваших данных в одну таблицу с соответствующей информацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...