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