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

im работает над системой уведомлений, как и в facebook.

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

введите описание изображения здесь

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

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

как для типа

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

wall post – мне нужно извлечь данные из стенового сообщения и таблицы уведомлений как

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

например

Рахул отправил на твою стену 2 часа назад

1 час назад

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

Я бы не стал делать все это в одном запросе. Я бы предпочел сделать несколько небольших простых запросов, по одному для каждого типа сущности (стеновое сообщение, комментарий и т. Д.), А затем собрать результаты в 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; 

Это зависит от того, как данные структурированы в ваших других таблицах. Если он похож (или может быть, по крайней мере, суммирован подобным образом), вы можете использовать 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, чтобы ограничить подзапросы. Если вы действительно находите проблемы с производительностью, вы можете посмотреть на денормализацию своих данных в одну таблицу с соответствующей информацией.