我正在做我的第一份工作在PHP/MySQL &我需要帮助。我有一个主表:MySQL查询表
CREATE TABLE `m4l_movies` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Title` varchar(250) NOT NULL,
`Rating` int(11) NOT NULL,
`Genre` varchar(250) NOT NULL,
`Actors` varchar(250) NOT NULL,
`UserID` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=115 DEFAULT CHARSET=utf8;
接收用于具有从这些值查找表形式输入:
CREATE TABLE `m4l_actors` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Actor` varchar(255) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=232 DEFAULT CHARSET=utf8;
CREATE TABLE `m4l_genre` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Genre` varchar(255) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=202 DEFAULT CHARSET=utf8;
CREATE TABLE `m4l_movierating` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Movie_Rating` varchar(250) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
&我已经创建的视图:
SELECT m4l_movies.ID AS ID,
m4l_movies.Title AS Title,
m4l_movierating.Movie_Rating AS Rating,
m4l_movies.Actors AS Actors,
m4l_movies.Genre AS Genre
FROM m4l_movies
JOIN m4l_movierating ON m4l_movierating.ID = m4l_movies.Rating
INNER JOIN m4l_genre ON m4l_movies.Genre = m4l_genre.ID
INNER JOIN m4l_actors ON m4l_movies.Actors = m4l_actors.ID
ORDER BY m4l_movies.Title
这里是我得到的结果:
----------------------------------------------------------------|
ID Title Rating Actor Genre |
10 Summer G (10,15,25) (45,115,123) |
1 About You G-1 (63,163,405) (3,16,51) |
5 Dog Years P (45,65,95) (98,163,357) |
----------------------------------------------------------------|
首先,这个视图应该返回超过200条记录。其次,我需要知道如何创建一个查找或其他一些方法来将NAME & GENRE转换回相应的文本值。一些RATING值如何正确执行,但我无法使NAME或GENRE正确执行。我相信这与我加入表格的方式有关,但我无法弄清楚我要出错的地方。有人请帮助我。
好的尝试与菲尔建议做出我已经去除了演员跟着一起,从电影的故事&流派创建movies_genre & movies_actors
DROP TABLE IF EXISTS `m4l_movies`;
CREATE TABLE `m4l_movies` (
`ID` int(11) NOT NULL auto_increment,
`Title` varchar(250) NOT NULL,
`Year` float NOT NULL,
`Review` varchar(250) NOT NULL,
`Rating` int(11) NOT NULL,
`Image` varchar(250) NOT NULL,
`Storyline` longtext NOT NULL,
`Director` varchar(250) NOT NULL,
`UserID` int(11) NOT NULL default '1',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `m4l_movie_actor` (
movie_id INT(11),
actor_id INT(11),
PRIMARY KEY (movie_id, actor_id),
FOREIGN KEY (movie_id) REFERENCES m4l_movies (ID),
FOREIGN KEY (actor_id) REFERENCES m4l_actors (ID)
);
CREATE TABLE `m4l_movie_genre` (
movie_id INT(11),
genre_id INT(11),
PRIMARY KEY (movie_id, genre_id),
FOREIGN KEY (movie_id) REFERENCES m4l_movies (ID),
FOREIGN KEY (genre_id) REFERENCES m4l_genre (ID)
);
DROP TABLE IF EXISTS m4l_genre;
CREATE TABLE m4l_genre (
ID int(11) NOT NULL auto_increment,
Genre varchar(250) NOT NULL,
PRIMARY KEY (ID)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS m4l_actors;
CREATE TABLE m4l_actors (
ID int(11) NOT NULL auto_increment,
Actor varchar(255) NOT NULL,
PRIMARY KEY (ID)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
但是当我尝试创建movie_actor OR MOVIE_GENRE我得到
9时29分45秒
CREATE TABLE`m4l_movie_actor`(movie_id INT(11),actor_id INT(11),
PRIMARY KEY(movie_id ,actor_id),
外键(movie_id)参考m4l_movies(ID),
外键(actor_id)参考m4l_actors(ID))
错误代码:1215无法添加外键约束
0.000秒9点四十分56秒CREATE TABLE
m4l_movie_genre
(movie_id INT(11),genre_id INT(11),
PRIMARY KEY(movie_id,genre_id),
外键(movie_id)参考m4l_movies(ID),
外键(genre_id )参考文献m4l_genre(ID))
错误代码:1215无法添加外键约束
0.016秒
从我可以收集这些,当你有数据类型不匹配仅发生,但我想我拥有所有INT数据类型,所以为什么我收到这个错误?
决不(我的意思是**从不**)将逗号分隔的外键存储在单个字段中。改为使用[联结表](http://en.wikipedia.org/wiki/Junction_table)。 – Phil
菲尔,如果你能解释什么和怎么做,我就是为了它......我只是想让这件事情起作用。 – Les
你有没有打开链接的维基文章? – Phil