2017-03-09 4 views
0
mysql> describe Movies; 
+-------------+--------------+------+-----+---------+-------+ 
| Field  | Type   | Null | Key | Default | Extra | 
+-------------+--------------+------+-----+---------+-------+ 
| MOVIE_ID | char(5)  | NO | PRI |   |  | 
| TITLE  | varchar(100) | NO |  | NULL |  | 
| RATING  | varchar(3) | YES |  | NULL |  | 
| GENRE  | varchar(15) | YES |  | NULL |  | 
| RELEASEDATE | char(4)  | YES |  | NULL |  | 
| ACTOR_ID | char(5)  | NO | MUL | NULL |  | 
| ACTOR_ID_2 | char(5)  | YES | MUL | NULL |  | 
| ACTOR_ID_3 | char(5)  | YES | MUL | NULL |  | 
+-------------+--------------+------+-----+---------+-------+ 


mysql> describe Actors; 
+----------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+----------+-------------+------+-----+---------+-------+ 
| ACTOR_ID | char(5)  | NO | PRI |   |  | 
| FNAME | varchar(40) | NO |  | NULL |  | 
| LNAME | varchar(40) | NO |  | NULL |  | 
+----------+-------------+------+-----+---------+-------+ 

まず第一に、私は別の私のテーブルを作ってきたはずです知っている、アクターID、actorid2、actorid3を持って ない良い方法であることが、これは、私が働いている グループプロジェクトで、私は テーブルを変更できませんでした。だから私はそれを機能させるようにしています。クエリでは:私は 名がどの映画にである俳優の知っているので別のテーブルに参加している間にテーブルのすべての列を検索するにはどうすればよいですか?

select * from Movies join Actors on Actors.ACTOR_ID in (Movies.ACTOR_ID, Movies.ACTOR_ID_2, Movies.ACTOR_ID_3); 

私は映画にすべての俳優が参加しています。 ユーザーが映画、ジャンル、または俳優を検索し、すべての 情報を返す検索機能が必要です。だから私はこのクエリを作っています

select * from Movies where 'Step Brothers' in (select * from Movies join Actors on Actors.ACTOR_ID in (Movies.ACTOR_ID, Movies.ACTOR_ID_2, Movies.ACTOR_ID_3)); 

ステップ・ブラザーズを、私はそれが ステップ・ブラザーズが存在している作品のすべての列を意志をポップアップ表示したいので、もちろん映画のタイトルです。または、彼らがウィルフェレル(彼はステップブラザーズの俳優)のために を検索した場合、すべての映画 ウィルフェレルの星がポップアップします。これはどうすればいいですか?私は

select * from Movies where 'Step Brothers' in (select * from Movies join Actors on Actors.ACTOR_ID in (Movies.ACTOR_ID, Movies.ACTOR_ID_2, Movies.ACTOR_ID_3)); 

を実行すると、私はOperand should contain 1 column(s)を得るが、彼らは 、右の列の同じ量でなければなりませんので、私は、各テーブルからすべての 列を選択していますか?

+0

'アクターID、actorid2、actorid3を、'持っているのは良い習慣ではありません...あなたの本能Three Stoogesムービーを含むだけでなく、他のアクターを除外する予定がない限り、テーブルは正規化されておらず、したがって使用するのが難しいです。 –

+0

このテーブルを動作させる方法はありますか?私はそれを修正する予定ですが、私はこの検索機能を私のプログラムに実装してテストしたいと思っています。 – XXIV

+0

両方のテーブルのすべての列でユーザー入力を検索しますか?あなたはどんな結果を期待していますか? –

答えて

0

あなたはこれを試すことができます:

select m.*, a.* 
from Movies m 
join Actors a on a.ACTOR_ID in (m.ACTOR_ID, m.ACTOR_ID_2, m.ACTOR_ID_3) 
where 'your search string' in (
    concat(a.FNAME, ' ', a.LNAME), 
    m.TITLE, 
    m.GENRE 
) 

検索文字列が俳優の名前、映画のタイトルや映画のジャンルと一致した場合、それはあなたに参加し、結果の行を表示します。

あなたは「すべての列で検索」と言うことはできません - 。あなたは、あなたが検索したい列を指定する必要が

+0

それは完璧に動作します! 'concat'をやってくれてありがとう、私はそれをどうやって行うのか分からず、別の問い合わせのためにそれを必要としていました。 – XXIV

関連する問題