2011-10-17 14 views
0

多くの結合でSQLクエリを使用しています。事実は、クエリがStudentClassテーブルとクラステーブルに参加する前に、正しい行量を4行に出力することでした。しかし、ClassクラスとStudentClassテーブルをインクルードすると、まだ4行を出力する必要があるときに6行が出力されます。問題は、学生が2つのモジュールを受け取り、2つのクラスにある場合、2つのモジュールが複製された4つのモジュールと、2つのクラスが複製された4つのクラスを出力することです。なぜこれが起こっているのですか?テーブルを設定する方法に問題があるのですか、それともクエリですか?以下はより多くのレコードを出力するクエリ

は、PHPのコードです:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

    <head> 
    <title>Exam Grade Report</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    </head> 

    <body> 

    <?php 
     if (isset($_POST['submit'])) { 

     $query = " 
      SELECT * FROM Course c 
      INNER JOIN CourseModule cm ON c.CourseId = cm.CourseId 
      JOIN Module m ON cm.ModuleId = m.ModuleId 
      JOIN Session s ON m.ModuleId = s.ModuleId 
      JOIN Grade_Report gr ON s.SessionId = gr.SessionId 
      JOIN Student st ON gr.StudentId = st.StudentId 
      JOIN StudentClass sc ON st.StudentId = sc.StudentId 
      JOIN Class cl ON sc.ClassId = cl.ClassId 
      WHERE 
      ('".mysql_real_escape_string($sessionid)."' = '' OR gr.SessionId = '".mysql_real_escape_string($sessionid)."') 
      AND 
      ('".mysql_real_escape_string($courseid)."' = '' OR cl.CourseId = '".mysql_real_escape_string($courseid)."') 
      AND 
      ('".mysql_real_escape_string($moduleid)."' = '' OR cl.ModuleId = '".mysql_real_escape_string($moduleid)."') 
      AND 
      ('".mysql_real_escape_string($classid)."' = '' OR sc.ClassId = '".mysql_real_escape_string($classid)."') 
      AND 
      ('".mysql_real_escape_string($teacherid)."' = '' OR s.TeacherId = '".mysql_real_escape_string($teacherid)."') 
      AND 
      ('".mysql_real_escape_string($studentid)."' = '' OR gr.StudentId = '".mysql_real_escape_string($studentid)."') 
      AND 
      ('".mysql_real_escape_string($grade)."' = '' OR gr.Grade = '".mysql_real_escape_string($grade)."') 
      ORDER BY $orderfield ASC"; 

     $num = mysql_num_rows($result = mysql_query($query)); 
     mysql_close(); 

    ?> 

    </body> 
</html> 

私はワード文書に持っているクエリ結果とテーブルを表示したいです。あなたが望むならば、あなたはすべて単語の文書を開くことができるように、どうやって単語ファイルを添付できますか?

はあなた

+0

これはコードのオーバーロードです。コード量を最小限に抑えて、関連するスニペットのみを表示してください –

+0

SQLクエリの質問をする場合は、5マイル分のPHPとHTMLを含めないでください。問題の原因となっている実際のSQLを表示し、テーブル構造についての詳細がいくつかあります。 –

+0

あなたは何をグループにしようとしていますか?学生? StudentClass?どのような情報を抽出しようとしていますか( 'SELECT *'を 'SELECT [フィールド]、[フィールド]、[フィールド] 'に置き換えたい場合があります)1)返されるデータの量を減らし、2)あなたが抽出しようとしている情報のアイデア)。 – Tom

答えて

1

はLEFTなJOINにJOINをすべてあなたが変更しようとしているありがとうございましたか!

関連する問題