1

現在、必要な情報を取得するために 2 つのテーブルを結合することができました。別のテーブル ( users.user_id ) から別の情報を取得しようとしましたが、使用しようとしているクエリが機能していないようです。誰かがクエリを手伝ってくれるなら、それは素晴らしいことです。

これが正常に機能する現在のクエリです。

     "SELECT films.movie_title, films.rating, films.actor, reviewed.review
      FROM films
      INNER JOIN reviewed
      ON films.movie_id=reviewed.movie_id";

これは、3 つのテーブルからデータを取得するために使用されているクエリですが、機能しません

    "SELECT films.movie_title, films.rating, films.actor, reviewed.review users.name
      FROM films
      OUTER JOIN reviewed, users
      ON films.movie_id=reviewed.movie_id && films.user_id=users.user_id";

データベース:film

テーブルのテーブル構造films

CREATE TABLE IF NOT EXISTS `films` (
   `movie_id` int(4) NOT NULL AUTO_INCREMENT,
   `movie_title` varchar(100) NOT NULL,
   `actor` varchar(100) NOT NULL,
   `rating` varchar(20) NOT NULL,
   `user_id` int(100) NOT NULL,
    PRIMARY KEY (`movie_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;


 INSERT INTO `films` (`movie_id`, `movie_title`, `actor`, `rating`, `user_id`) VALUES
  (1, 'batman', 'christian bale', 'Excellent', 3),
  (2, 'Bne', 'reee', 'Ok', 3),
  (3, 'Today', 'dd', 'Fair', 3);

テーブルのテーブル構造reviewed

 CREATE TABLE IF NOT EXISTS `reviewed` (
   `review_id` int(4) NOT NULL AUTO_INCREMENT,
   `review` mediumtext NOT NULL,
   `movie_id` int(4) NOT NULL,
   PRIMARY KEY (`review_id`),
   KEY `movie_id` (`movie_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;



 INSERT INTO `reviewed` (`review_id`, `review`, `movie_id`) VALUES
 (1, 'Wicked film', 1),
 (2, 'gedtg', 2),
 (3, 'dddd', 3);

テーブルのテーブル構造users

 CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(4) NOT NULL AUTO_INCREMENT,
  `email` varchar(40) NOT NULL,
  `password` varchar(40) NOT NULL,
  `name` varchar(30) NOT NULL,
   PRIMARY KEY (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=30 ;



INSERT INTO `users` (`user_id`, `email`, `password`, `name`) VALUES
 (1, 'ben@talktalk.net', 'password', 'Ben'),
 (2, 'richard@talk.net', '1', 'richard'),
4

3 に答える 3

1

レビュー テーブルに user_id を含めることは可能ですか? そうすれば、次のようになります。

  1. 映画のテーブル; 映画ごとに1つだけ
  2. ユーザーのテーブル; ユーザーごとに 1 つだけ
  3. レビューの表; ユーザーと映画にリンクされたレビューごとに 1 つ

レビュー テーブルには、評価、レビュー自体、ユーザー ID、映画 ID、および一意のレビュー ID が含まれます。

そうすれば、映画の行を複製することなく、バットマンに私からの優れた評価とあなたからの平均評価を与えることができます.

上記のクエリを修正するには、次を使用できます。

SELECT films.movie_title, films.rating, films.actor, reviewed.review, users.name FROM films, reviewed, users WHERE films.movie_id = reviewed.movie_id AND films.user_id = users.user_id;
于 2013-10-25T17:46:51.853 に答える