Здравствуйте!
У меня есть сайт социальной сети, на сайте пользователи могут добавлять посты (записи) к себе на страницу.
Я хочу так же чтоб можно было прикреплять файлы из раздела сайта (например фото, аудиозаписи, видео), скажем все точ как сейчас Вконтакте, но не могу разобраться со структурой бд таблицы для постов, как оно должно быть и как потом это все выводить.
примерная структура таблицы с постами
id - ид записи
self_id - на какой страницу размещен
author_id - кто написал запись
text - текст записи
думал добавить к этой таблицы поле attach_audio для прикрепленных аудио записей с ихними ID'ами (ведь можно добавлять не одну а несколько) (например 10,30,55)
но а как тогда можно сделать одним запросом вывод записи и прикрепленных аудио записей.
Благодарен буду всем за отзывы!
А возможно ли как то сделать запрос чтоб на выходе был так
array (
'id' => 1,
'self_id' => 1 ,
'user_id' => 1 ,
'text' => 'text post',
'attach_audio' => array (
0 => array (
'audio_id' => 10 ,
'title' => 'track title'
)
)
)
скажем что то в этом роде
SELECT post.*, (SELECT audio.* FROM audio WHERE audio IN (post.attach_audio)) as attach_audio
FROM post
1. Можно хранить все аттачи для сообщения в отдельном поле в формате json, например. Выводить аттач через javascript, без лишних запросов, просто генерируйте линк на лету. Например, по хешу из id + '.mp3' и получите ссылку на аттач в mp3. Тип аттача можно также хранить в json в определенном свойстве.
2. Можно делать несколько дополнительных запросов и получать готовые ссылки на стороне сервера.
3. Можно сделать отдельную таблицу для всех аттачей и получать их при выводе сообщения по message_id.
+ последние сообщения можно (и наверное нужно) кешировать, так что, на вскидку, любой метод подойдет, мне пока не понятны критичные места.
мне пока не понятны критичные места - если на странице 20 записей к заждому записи делать несколько доп. запросов на вывод аттача (например запрос на вывод аудио, видео, фото) то будет суммарное кол-во запросов.
например у аудиозаписей, есть название и исполнитель трека, если пользователь изменил название или удалил его в разделе с музыкой, то следовательно и должно это изменение отобразиться и самой записе