2012-01-20 17 views
1

私はデータベースのフィールド内のキーワードを探す必要があるmysqlクエリを使用してデータを取得しようとしています。複数の単語に一致するmysqlクエリとPHPを使って結果を表示

私のデータベース内のユーザーは、自分の「科目」欄に次のように持っていることがあります。

「数学|科学|読書|書き込み '

これは、ユーザーがすべての主題を受け入れることを意味します。このテーブルは 'user_teacher'と呼ばれます

私は学生のための別のテーブルを持っています(student_requestsと呼ばれます)、科学、数学、あるいは2つの科目の学生からの要求から成ります(この場合、 「科学|数学」のように見える)。このテーブルは、これらの値を「被験者」というフィールドにも格納します。

私の質問は、「student_requests」のエントリを検索して、どのテーブルに「user_teacher」というテーブルの特定のユーザーのプロファイル内のリストされたサブジェクトに一致するクエリをどのように作成するのですか?のは、私が最初にこのようなものを使用して、教師の件名フィールドをルックアップすることを想定してみましょう:言い換えれば

$query = "SELECT * FROM user_teacher WHERE username = '$username' LIMIT 1 "; 
$result = mysql_query($query); 
while ($row = mysql_fetch_object($result)) { 
    $teacher_subjects=$row->subject; 
} 

、私は読書と数学を提供しています教師です場合、i「はstudent_requests」テーブル内のすべてのエントリを見てみたいですここでは、件名フィールドに「数学」や「読書」があります。

これについてのご支援をいただければ幸いです。また、私がテーブルの設定方法に基づいてこの問題に間違っていると思われる場合は、私に知らせてください。ここでの目標は、できるだけ早くクエリを実行することです。

ありがとうございます!

答えて

1

あなたは別のテーブルsubjectsidname)と他の二つのテーブルstudents_requestsidid_studentid_subject)を作る代わりに、あなたのテーブルのための建設のようなものを使用していない試みることができる[ここで、あなたは一人の学生のための複数の要求を記録することができます]とteach_subjectsidid_teachsuject_id)[教師のための複数の件名]とあなたはあなたが受け取ったものに基づいて、テーブル間の結合、またはプレーンなPHPチェックすることができます。

EDIT 1:

SELECT * FROM `students` WHERE `id` IN (SELECT `subject_id` FROM `students_request` INTERSECT SELECT `subject_id` FROM `teach_subject`); 

そしてsubject_idstudents_requestsからid_subjectを変更してください。

+0

この方法は、賢明なドールShemerにより、以下の提案された解決策より高速なパフォーマンスになりますか? –

+0

@robmelinoはい、私のバージョンはシステムの正規化です。ウィキペディアに3つの正規形をチェックしてください。 – khael

+0

あなたが説明したようにテーブルを作成したと仮定すると、あなたの答えにjoin mysqlクエリの例を含めることができますか?あるいは、あなたが提案したPHPチェック?助けてくれてありがとう! –

1

subjectsをテキストフィールドとして定義する代わりに、setを試してみてください。

SELECT * FROM student_requests s join user_teacher t ON (FIND_IN_SET(s.subject, t.subjects)>0) WHERE t.username = '$username'; 

はあなたにこの先生の科目を要求されたすべての学生を与える必要があります。そして、あなたは、たとえば、より便利な方法でこれらのフィールドを検索することができます

subjects SET('math', 'science', 'reading', 'writing') 

:あなたの定義は、の線に沿ってでなければなりません受け入れます。

ここセットについて詳しく読む:http://dev.mysql.com/doc/refman/5.0/en/set.html

関連する問題