Множественные записи в MySQL
1.
Рюук (01.04.2011 / 22:23)
Помогите решить задачку) Суть ее заключается в том, что я создал таблицу в бд и первый ее столбец это Ник или ID юзера, а дальше...мммм...он например будет добавлять названия фильмов которые посмотрел, и нужно что бы каждое название добавлялось либо в отдельную ячейку (проблема здесь в том что один юзер добавит 5 фильмов а другой 1500, мне кажется что не верно было бы создавать вручную 1500 ячеек), либо в одну но что бы была возможность запросить любое из значений ячейки в отдельности, в виде списка, отсортировать ну и так далее...
Добавлено через 03:01 сек.
Банальный пример "Вконтакте" у пользователей бывает огромное количество песен на странице есть маньяки залившие и 5000 песен, но я не думаю, что в бд присутствует 5000+ ячеек для записи музыки
2.
ramzes (01.04.2011 / 22:50)
Отдельная таблица фильмов с ключем на ид юзера
3.
Рюук (01.04.2011 / 22:54)
Хорошо а если список динамически обновляется?
Добавлено через 04:50 сек.
То есть я или модеры добавляем новые фильмы то мне придется постоянно ее обновлять...
4.
Петруха (02.04.2011 / 16:29)
"Хорошо а если список динамически обновляется?"
а из-за этого могут возьникнуть проблемы?
5.
Анатолий (02.04.2011 / 17:02)
ramzes (1 Апреля 2011 / 21:50)
Отдельная таблица фильмов с ключем на ид юзера
Кстати, так и не выяснил этот спорный вопрос.
Лучше создать таблицу вида
user_id | film_id
и множить тысячами записи (в таком случае будет очпуительный запрос с выборкой фильмов, которые помсотрел пользователь для общей статистики, и одинарный селект для проверки смотрел ли юзер этот фильм)
или же
user_id | all_films_id_with_separator
Где во второе поле записывать через определенный сепаратор ИД всех просмотренныхх фильмов (Например
admin | :2:234:3543:23:16:2
)
тогда выбор всех фильмов будет не проблематичным, explode второе поле и все (можно даже в запросе "LEFT JOIN films ON films_table.films_ids_field LIKE (%:films.id:%)"); )
Но тогда при выборе пользователей, которые смотрели какой либо фильм снова получится громоздкий селект да еще и с LIKE.
Кто какие решения использует?
6.
Петруха (02.04.2011 / 17:26)
Суть вопроса в спсике просмотренных фильмов или добвке видео? Разумеется, что можно и в одной ячейке хранить ПРОСМОТРЕННЫЕ фильмы, достаточно будет хранить их через запятую а при выводи списка SELECT `name`, `info` FROM `video` WHERE `id` IN ($ListVideo)
где $ListVideo - данные ячейки пользователя
7.
Анатолий (02.04.2011 / 17:46)
suhonok (2 Апреля 2011 / 16:26)
где $ListVideo - данные ячейки пользователя
А я всегда думал, что внутри `id` IN ($query) должен стоять SQL запрос, и IN возвращает true когда `id` является одним из результатов запроса $query O_o
8.
ramzes (02.04.2011 / 18:15)
5.
dekameron, еще одна таблица, просмотры
записи можно чистить, можно кешировать в файл для каждого пользователя отдельно,
тип информации не очень актуален, не стоит его лепить в основную таблицу
чем реже она изменяется тем лучше кешируется вроде
Добавлено через 01:43 сек.
SinigamiRuyk (1 Апреля 2011 / 22:54)
Хорошо а если список динамически обновляется?
А есть не динамическая выборка данных?
в чем суть вопроса?
9.
Петруха (02.04.2011 / 18:22)
7.
dekameron, при WHERE `id` IN() вернёт все записи из списка
10.
Рюук (02.04.2011 / 18:55)
5.
dekameron, спасибо думаю воспользуюсь твоей моделью, а то все сообразить не мог как это организовать)))
11.
Анатолий (02.04.2011 / 19:16)
9.
suhonok, кулл, спасибо
полезная штука)
URL:
https://visavi.net/topics/20325