2013-09-19 3 views
1

Я создаю базу данных фильмов, и я думаю, что я ее закончил, но мои результаты не возвращаются, как мне бы хотелось. Сейчас у меня есть только 2 ролика в базе данных. Я пытаюсь заставить его перестать отображать дублируемую информацию.База данных фильмов Mysql

Можете ли вы взглянуть и дать отзыв?

Спасибо за помощь заранее.

/* 
Navicat MySQL Data Transfer 

Source Server   : localhost 
Source Server Version : 50525 
Source Host   : localhost 
Source Database  : MovieDB 

Target Server Version : 50525 
File Encoding   : utf-8 

Date: 09/12/2013 22:06:21 PM 
*/ 

SET NAMES utf8; 
SET FOREIGN_KEY_CHECKS = 0; 

-- ---------------------------- 
-- Table structure for `FORMAT` 
-- ---------------------------- 
DROP TABLE IF EXISTS `FORMAT`; 
CREATE TABLE `FORMAT` (
    `ID` int(10) NOT NULL AUTO_INCREMENT, 
    `Formats` varchar(10) NOT NULL DEFAULT '', 
    PRIMARY KEY (`ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; 

-- ---------------------------- 
-- Table structure for `FORMAT_ID` 
-- ---------------------------- 
DROP TABLE IF EXISTS `FORMAT_ID`; 
CREATE TABLE `FORMAT_ID` (
    `MovieID` int(11) NOT NULL DEFAULT '0', 
    `FormatID` int(11) NOT NULL DEFAULT '0', 
    `Num_Discs` int(128) DEFAULT NULL, 
    `Locations` varchar(128) DEFAULT NULL, 
    PRIMARY KEY (`MovieID`,`FormatID`), 
    KEY `FormatID` (`FormatID`), 
    CONSTRAINT `FORMAT_ID_ibfk_1` FOREIGN KEY (`MovieID`) REFERENCES `MOVIE` (`ID`), 
    CONSTRAINT `FORMAT_ID_ibfk_2` FOREIGN KEY (`FormatID`) REFERENCES `FORMAT` (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

-- ---------------------------- 
-- Table structure for `GENRE` 
-- ---------------------------- 
DROP TABLE IF EXISTS `GENRE`; 
CREATE TABLE `GENRE` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `Genres` varchar(50) NOT NULL DEFAULT '', 
    `Descriptions` varchar(128) DEFAULT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8; 

-- ---------------------------- 
-- Table structure for `GENRE_ID` 
-- ---------------------------- 
DROP TABLE IF EXISTS `GENRE_ID`; 
CREATE TABLE `GENRE_ID` (
    `MovieID` int(11) NOT NULL DEFAULT '0', 
    `GenreID` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`MovieID`,`GenreID`), 
    KEY `GenreID` (`GenreID`), 
    CONSTRAINT `GENRE_ID_ibfk_2` FOREIGN KEY (`GenreID`) REFERENCES `GENRE` (`ID`), 
    CONSTRAINT `GENRE_ID_ibfk_1` FOREIGN KEY (`MovieID`) REFERENCES `MOVIE` (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

-- ---------------------------- 
-- Table structure for `MOVIE` 
-- ---------------------------- 
DROP TABLE IF EXISTS `MOVIE`; 
CREATE TABLE `MOVIE` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `Titles` varchar(128) NOT NULL DEFAULT '', 
    `Alt_Titles` varchar(128) DEFAULT NULL, 
    `Types` varchar(10) NOT NULL DEFAULT '', 
    `Synopsis` varchar(128) DEFAULT NULL, 
    `Images` varchar(128) DEFAULT NULL, 
    `Num_Eps` int(10) DEFAULT '0', 
    `Catagories` varchar(50) NOT NULL DEFAULT '', 
    `Duration` time DEFAULT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 

-- ---------------------------- 
-- Table structure for `RENT` 
-- ---------------------------- 
DROP TABLE IF EXISTS `RENT`; 
CREATE TABLE `RENT` (
    `MovieID` int(11) NOT NULL DEFAULT '0', 
    `Rents` varchar(3) NOT NULL DEFAULT '', 
    `Who` varchar(128) NOT NULL DEFAULT '', 
    `Note` varchar(128) DEFAULT NULL, 
    PRIMARY KEY (`MovieID`,`Rents`,`Who`), 
    CONSTRAINT `RENT_ibfk_1` FOREIGN KEY (`MovieID`) REFERENCES `MOVIE` (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

SET FOREIGN_KEY_CHECKS = 1; 

SQL:

select distinct Titles, Types, Num_Eps, Catagories, Duration, Formats, Num_Discs, Genres 
from MOVIE, FORMAT, FORMAT_ID, GENRE, GENRE_ID 
where MOVIE.ID=GENRE_ID.MovieID 
AND GENRE_ID.GenreID=GENRE.ID 
and MOVIE.ID=FORMAT_ID.MovieID 
AND FORMAT_ID.FormatID=FORMAT.ID 
order by Titles; 

это мои результаты:

Titles,Types,Num_Eps,Catagories,Duration,Formats,Num_Discs,Genres 
Ghost in the Shell,Movie,1,Anime,01:23:00,DVD,1,Mecha 
Ghost in the Shell,Movie,1,Anime,01:23:00,DVD,1,Police 
Ghost in the Shell,Movie,1,Anime,01:23:00,DVD,1,Psychological 
Ghost in the Shell,Movie,1,Anime,01:23:00,DVD,1,Sci-Fi 
Ghost in the Shell,Movie,1,Anime,01:23:00,DVD,1,Cyberpunk 
Ghost in the Shell,Movie,1,Anime,01:23:00,Bluray,1,Mecha 
Ghost in the Shell,Movie,1,Anime,01:23:00,Bluray,1,Police 
Ghost in the Shell,Movie,1,Anime,01:23:00,Bluray,1,Psychological 
Ghost in the Shell,Movie,1,Anime,01:23:00,Bluray,1,Sci-Fi 
Ghost in the Shell,Movie,1,Anime,01:23:00,Bluray,1,Cyberpunk 
Summer Wars,Movie,1,Anime,01:54:00,DVD,1,Comedy 
Summer Wars,Movie,1,Anime,01:54:00,DVD,1,Sci-Fi 
Summer Wars,Movie,1,Anime,01:54:00,HD,,Comedy 
Summer Wars,Movie,1,Anime,01:54:00,HD,,Sci-Fi 
+0

Какой желаемый выход? чтобы все жанры в одном столбце, как Вулькронос, предлагали в его ответе? –

+0

Желаемый результат должен состоять в том, чтобы все жанры для этого конкретного фильма были перечислены один раз и для форматов, которые будут перечислены один раз. Требуемый пример вывода выше. – user2537388

ответ

0

Никто, вероятно, больше не смотрит на эту тему, но я хотел, чтобы будущие взгляды и люди, которые помогли мне, нашли то, что я искал в вопросе.

select DISTINCT m.Title, 
      group_concat(DISTINCT g.Genre) as Genres, 
      group_concat(DISTINCT f.Format) as Formats 
from MOVIES m 
left join MOVIEGENRES mg on m.Code=mg.MovieCode 
left join GENRES g on mg.GenCode=g.Code 
left join MOVIEFORMATS mf on m.Code=mf.MovieCode 
left join FORMATS f on mf.FormCode=f.Code 
group by m.Code; 
1

Несколько точек. Я бы использовал полный синтаксис соединения,

FROM MOVIE JOIN GENRE ON MOVIE.ID=GENRE_ID.MovieID 

вместо тех предложений, которые у вас есть сейчас.

Тогда вы можете попробовать GROUP_CONCAT (expr), чтобы объединить жанры в одну строку, например. Меха, полиция, психологический, и т.д ...

+0

так что вы говорите что-то вроде этого? выберите различные заголовки, типы, Num_Eps, категории, продолжительность, жанры FROM MOVIE JOIN GENRE_ID ON MOVIE.ID = GENRE_ID.MovieID, GENRE где GENRE_ID.GENREID = GENRE.ID заказ по титрам; – user2537388

+0

Да. Это похоже на начало. :) – Vulcronos

+0

Получил жанр, чтобы работать нормально сейчас, не собираюсь ли я делать то же самое для форматов? Спасибо еще раз за помощь. – user2537388

0

Update: Благодаря Vulcronos я получил жанры и форматы перечислить в порядке, если я их отдельно с помощью

Жанр:

select distinct Titles, Types, Num_Eps, Catagories, Duration, Genres 
FROM MOVIE JOIN GENRE_ID ON MOVIE.ID=GENRE_ID.MovieID, GENRE 
where GENRE_ID.GENREID=GENRE.ID 
order by Titles; 

формат:

select distinct Titles, Types, Num_Eps, Catagories, Duration, Formats, Num_Discs, Locations 
FROM MOVIE JOIN FORMAT_ID ON MOVIE.ID=FORMAT_ID.MovieID, FORMAT 
where FORMAT_ID.FORMATID=FORMAT.ID 
order by Titles; 

Есть ли способ объединить два?

Так что я хотел бы получить что-то вроде этого:

Ghost in the Shell,Movie,1,Anime,01:23:00,DVD,1,Mecha 
Ghost in the Shell,Movie,1,Anime,01:23:00,DVD,1,Police 
Ghost in the Shell,Movie,1,Anime,01:23:00,DVD,1,Psychological 
Ghost in the Shell,Movie,1,Anime,01:23:00,DVD,1,Sci-Fi 
Ghost in the Shell,Movie,1,Anime,01:23:00,Bluray,1,Cyberpunk 
Summer Wars,Movie,1,Anime,01:54:00,DVD,1,Comedy 
Summer Wars,Movie,1,Anime,01:54:00,HD,,Sci-Fi 

Где бы перечислить жанры раз и форматы один раз. Конечно, с несколькими жанрами формат будет повторяться, если не будет возможности исправить это, но где он будет хотя бы показывать все форматы один раз с жанрами один раз.

Спасибо за помощь.

+0

«Есть ли способ объединить эти два?» Я знаю, что вы уже решили свою проблему, и это устарело, но для ваших будущих вопросов не задавайте другого вопроса в ответ - вместо этого отредактируйте исходный вопрос или спросите новый, если они не связаны. :) –

Смежные вопросы