Recherche table dans MySQL

Je suis en train de faire mon premier travail en PHP/MySQL & j'ai besoin d'aide. J'ai un master de la table:

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;

qui reçoit des informations d'un formulaire qui a des valeurs à partir d'une de ces tables de recherche:

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;

& j'ai créé une Vue:

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

Voici les mettre j'obtiens:

----------------------------------------------------------------|
  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)      |
----------------------------------------------------------------|

Tout d'abord ce point de vue devrait revenir plus de 200 dossiers. Deuxièmement, j'ai besoin de savoir comment créer un de recherche ou une autre méthode pour convertir le NOM de & GENRE retour à leurs valeurs de texte. D'une façon ou la valeur de NOTATION est en train de faire mais je ne peux pas obtenir le NOM ou le GENRE pour le faire correctement. Je suis sûr que ça a à voir avec la façon dont je l'ai rejoint la table, mais je ne peux pas savoir où je vais mal. Quelqu'un s'il vous PLAÎT aider moi.

Ok en essayant de suivre avec la suggestion faite par Phil j'ai supprimé les acteurs, le genre de films conte & créé 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;

mais lorsque j'essaie de créer le movie_actor OU movie_genre-je obtenir

09:29:45

CREATE TABLE `m4l_movie_actor` (movie_id INT(11), indique INT(11),

CLÉ PRIMAIRE (movie_id, actor_id),

La CLÉ ÉTRANGÈRE (movie_id) RÉFÉRENCES m4l_movies (ID),

La CLÉ ÉTRANGÈRE (actor_id) RÉFÉRENCES m4l_actors (ID) )

Code D'Erreur: 1215. Impossible d'ajouter la contrainte de clé étrangère

0.000 sec

09:40:56 CREATE TABLE m4l_movie_genre (movie_id INT(11),genre_id INT(11),

CLÉ PRIMAIRE (movie_id, genre_id),

La CLÉ ÉTRANGÈRE (movie_id) RÉFÉRENCES m4l_movies (ID),

La CLÉ ÉTRANGÈRE (genre_id) RÉFÉRENCES m4l_genre (ID) )

Code D'Erreur: 1215. Impossible d'ajouter la contrainte de clé étrangère

0.016 sec

De ce que je peux rassembler cela se produit uniquement lorsque vous avez des types de données de décalage, mais je PENSE que j'ai tout INT types de données, alors pourquoi suis-je reçois cette erreur?

  • Jamais (et je veux dire jamais) magasin séparées par des virgules, des clés étrangères dans un seul champ. Utiliser un table de jonction à la place.
  • Phil si tu pouvais expliquer ce que & comment faire, je suis tout pour elle...je viens d'essayer d'obtenir cette chose à travailler.
  • Avez-vous la peine de regarder à la liés article de wiki?
  • Oui je l'ai regardé & a, tout autant que je le suis maintenant. La création d'une "table de jonction" joli son, mais je suis en utilisant un programme appelé PHPMaker pour créer les pages de saisie / édition / affichage de la DB alors, comment puis-je obtenir les données à partir de la forme de ce tableau?
  • forums.hkvstore.com/viewtopic.php?f=4&t=27547
  • Je vous remercie beaucoup de vos conseils last nite(ce matin) a été inestimable...ça aide BEAUCOUP. Donc, je VOUS REMERCIE!!!
  • Je pense que vous devez utiliser InnoDB au lieu de MyISAM si vous voulez des clés étrangères. Vous pouvez aussi avoir besoin de faire la jonction table id colonnes NOT NULL afin qu'ils correspondent exactement à la cible clés
  • Oui j'ai vu que trop merci, une autre question je ne peux pas ajouter ou modifier des enregistrements dans le ViewList. Est-il possible de créer une interface unique pour ajouter ou modifier enregistrement donc je n'ai pas à ajouter/modifier des chaque table séparément?

InformationsquelleAutor Les | 2014-03-25