biryerde
@biryerde

Как организовать прикрепление файлов к записям?

Здравствуйте!
У меня есть сайт социальной сети, на сайте пользователи могут добавлять посты (записи) к себе на страницу.
Я хочу так же чтоб можно было прикреплять файлы из раздела сайта (например фото, аудиозаписи, видео), скажем все точ как сейчас Вконтакте, но не могу разобраться со структурой бд таблицы для постов, как оно должно быть и как потом это все выводить.
примерная структура таблицы с постами
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

?????????
  • Вопрос задан
  • 284 просмотра
Пригласить эксперта
Ответы на вопрос 2
neochar
@neochar
PHP vs Python
1. Можно хранить все аттачи для сообщения в отдельном поле в формате json, например. Выводить аттач через javascript, без лишних запросов, просто генерируйте линк на лету. Например, по хешу из id + '.mp3' и получите ссылку на аттач в mp3. Тип аттача можно также хранить в json в определенном свойстве.
2. Можно делать несколько дополнительных запросов и получать готовые ссылки на стороне сервера.
3. Можно сделать отдельную таблицу для всех аттачей и получать их при выводе сообщения по message_id.

+ последние сообщения можно (и наверное нужно) кешировать, так что, на вскидку, любой метод подойдет, мне пока не понятны критичные места.
Ответ написан
@shagguboy
но а как тогда можно сделать одним запросом вывод записи и прикрепленных аудио записей.


LEFT JOIN
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы