| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Как реализовать базу данных по фильмам |
| Автор: Axielandr 7.8.2008, 17:49 |
| Хочу создать Базу данных по фильмам в mysql у себя на локальом сайте. Как сделать там чтобы, например в поле "жанр фильма" заносить несколько значений, напрмер, боевик, фантастика, комедия, И потом, чтобы на сайте у определенного фильма отображалось несколько жанров. |
| Автор: bars80080 7.8.2008, 17:54 |
| заносить несколько значений: боевик, фантастика, комедия какая разница сколько текста записывать в поле? |
| Автор: Mal Hack 7.8.2008, 18:59 |
| Axielandr, прочитайте в документации по такие типы данных, как множество и перечисление (SET и ENUM). Под жанры отводите отдельную таблицу, с уникальным идентификатором записей. В поле ganre фильма заносите множество уникальных ключей, соответствующих жанрам. В принципе, реализвация может быть и другой, но с точки зрения технологии копать надо в сторону множеств. |
| Автор: Axielandr 7.8.2008, 20:43 |
| Mal Hack, спасибо, что подсказали в каком направлении "копать". Просто я новичек в этом деле еще. |
| Автор: HackMan 8.8.2008, 06:36 |
| Очевидным минусом множеств является то, что множества не могут содержать более 64 элементов, и должны быть заранее предопределены значения. Но для данной задачи с фильмами вполне пойдёт. |
| Автор: Mal Hack 8.8.2008, 21:05 |
| HackMan, можно использовать связку ENUM+SET, ну или как я говорил выше, реализовывать множество черезу другие типы данных, как концепцию. |
| Автор: HackMan 8.8.2008, 21:24 | ||
Интересно взглянуть на реализацию. Я вообще стараюсь избегать типы SET и ENUM (возможно и неоправданно). Что это за тип данных такой, концепция? Я бы предложил вариант с промежуточной таблицей связей. Примерно так:
Таблица "filmgenrelinks" реализует связь "много-много",то есть к каждому из фильмов можно привязать несколько жанров, чего и требовалось. Правда, целостность данных и исключение повторений (в отличии от SET и ENUM) - всё это ложится на программиста. |
| Автор: DmitryChess 8.8.2008, 21:48 |
| Хм.. HackMan, а не проще ли следующим образом: Таблица1 - Films 1. id - код 2. name_film - название фильма 3. id_genrу - код жанра 4. year - год выпуска 5. description - описание Таблица2 - Genres 1. id_genry - код жанра 2. name_genry - название жанра |
| Автор: MoLeX 8.8.2008, 22:04 |
| поддерживаю DmitryChess, можно поступить и без третей таблицы filmgenrelinks |
| Автор: HackMan 8.8.2008, 22:19 |
| DmitryChess, это реализация связи "один-ко-многим". Больше одного жанра к одному фильму ты не прикрутишь. |
| Автор: source777 8.8.2008, 22:21 | ||||
|
| Автор: HackMan 8.8.2008, 22:27 |
| source777, ага, спасибо, не подумал про такой ключ. Повторения он исключит, но разве он исключит возможность создавать записи с несуществующими filmid и genreid? |
| Автор: source777 8.8.2008, 22:53 | ||
|
| Автор: Axielandr 9.8.2008, 06:59 |
| Вот допутим я создал отдельну таблицу по жанрам из двух полей id и ganre_name. А в таблицу с фильмами в поле ganre ("set") я заношу несколько значений: 1,5,6 и т..д (т.е. заношу номер id определенного жанра из таблицы со жанрами). Потом я делаю запрос к БД и получаю результат в котором несколько значений, например 1,5,6. У меня здесь вопрос: Как из этого результата выбрать по одному значению, т.е. я хочу чтобы было примерно так если в результате существеут '1' то выводить 'комедия' если в результате существеут '3' то выводить 'ужасы' вот чтото в этом роде Оговорюсь сразу, что владею знанием по php_mysql только на уровне новичка (знаю только простейшие функции) |
| Автор: HackMan 9.8.2008, 07:11 | ||
| Я так понимаю, ты хочешь получить список жанров фильма в текстовом виде? Если да, то вроде так:
|
| Автор: Mal Hack 9.8.2008, 13:52 | ||
Просто как пример. Делать текстовое поле, куда писать что-то вроде: READ|WRITE|UPLOAD - константы именования прав или жанров. Потом в скрипте эту строчку парсить через explode. Сами же имена жанров можно и в скрипт вшить, т.к. информация статическая и БД тут не нужна.
Это излишне. ДОп таблицы применяются тогда, когда связей слишком много или потоки данных большие. |
| Автор: HackMan 9.8.2008, 14:20 |
Аа, так вот, как это называется... Спасибо, буду знать |
| Автор: Axielandr 10.8.2008, 06:02 |
| HackMan, че то я не переворил этот код, ну да ладно. Вы мне просто скажите, вот после результата запроса я имею переменную допустим $ganres. И в ней есть значения 1,4,6 (цифры это id жанров). Неужели нет функции которая в этом результате проверяла бы существование определеныйх значений (в данном случае цифр) |
| Автор: HackMan 10.8.2008, 16:35 | ||
Axielandr, из таблицы ganres надо просто сделать выборку с айдишником. Если результат будет пустой - жанра с таким id не существует.
А дальше через mysql_num_rows() смотри, не пустой ли результат |
| Автор: Axielandr 16.8.2008, 06:22 | ||
Всем спасибо кто давал советы. Вроде получилось у меня, токо я по своему сделал.
Знаю, что некоторые слова не правильно написал (janre). Может этот способ примитивный, но главное, что я сам его сделал |
| Автор: Mal Hack 16.8.2008, 09:33 |
| Axielandr, сделайте одним запросом. Оптимальнее будет. Еще лучше через внутреннее множество IN |
| Автор: Axielandr 16.8.2008, 11:43 |
| Mal Hack, я же говорю я в php на уровне новичка только шарю, так что для меня пока и так сойдет |