2012-01-09 6 views
1

JOINEDテーブルの動的クエリを実行するには次のコードがありますが、何らかの理由で行を表示しようとすると最初の9行が表示されて停止します。JOINEDテーブルでSQL行が制限されています

$query = "SELECT `results`, `Success`, `Failure`, `Counter`, `Grades`, `Classes`, 
`Special_Id`, `SpecialCondition` FROM `Courses` INNER JOIN `Students` ON `id` = 
`Students_Id`"; 

そして、これは私が行をフェッチして表示しています方法です:

<?php 
foreach($results as $row){ 
echo $row['grades'].'<br />'; 
} 

私はphpMyAdminの中にSQLのJOIN構文をテストし、それが正のタスクとして返しながら、私だけということに気づきます結合後の結合テーブルではなく元のテーブルを示します。

私はここで間違っていますか?私はすべてのコードが正常に動作するので、コードのこの部分だけを表示しています.JOIN構文を削除すると美しく動作しますので、参加が問題を引き起こしていると思いますが、私は何をしているのか分かりません違う。 SQLスキーマを示すためにEDITED

確かに、うまくいけば、次のように役立ちます。

Table: Courses 
id (PK)| results | Success | Failure | Counter | Grades | Classes | 
1  Posted  1   0   2  B+   2 
2  Pending  0   0   1  NA   1 
3  Posted  0   1   3  F   1 
4 
5 
6 
7 
8 
9 
10+ 

Table: Students 
Students_Id (PK) | FirstName | LastName | 
    1    Chris  Test 
    2    Jen   Test 
    3 
    4 
    5 
    6 
    7 
    8 
    9 
    10+ 

読みやすくするため、他の10個以上の行の情報を削除しましたが、データが入力されています。

また、私はOPで気付きましたが、私は "Special_IdとSpecialConditions"を選択しています。それは実際には間違っています。私はこれらのフィールドをもう選択しません。

テーブルを結合するとき、すべての列はインナ・ジョインに成功するためにデータを持たなければならないのですか、それとも空の行が存在する可能性がありますか?

+0

質問にデータベーススキーマを追加できますか? –

+1

私はあなたのスキーマを理解しているか分かりません。コース1は学生クリス、コース2はJenに属していますか? – bfavaretto

答えて

2

テーブルのidStudents_IdStudentsに一致していることを示すクエリが表示されます。ただし、スキーマは、実際には学生識別子ではなく、そのテーブルのレコードインデックスであるかのように見せかけます。 Studentsテーブルのキーは、Coursesに追加の列が必要です。

IはphpMyAdminのにSQL構文をJOINテストし、それが正のタスクとして返しながら、私はそれだけで接合された後に元のテーブルとしない結合テーブルを示していることに気づきます。

Coursesテーブルに含まれている列を選択するようにクエリに指示しただけであることに注意してください。おそらくStudents.FirstNameStudents.LastName(または類似のもの)を選択したかったでしょう。

+0

ああ、私は今参照してください。私は完全に(FK)と選択ビットに関する良い点を忘れていた、私はそれについて考えることさえしなかった。お手伝いありがとう! – Cryotech

2

テーブルを結合するとき、結合条件を完了するためには、結合条件を満たす必要があります。この場合、内部結合であるため、結合条件が満たされていない行はすべて破棄されます。私はあなたに作ると思い

私の最初のポイントは、テーブルの別名を使用することで、そのよう:

SELECT 
    c.results, 
    c.Success, 
    c.Failure, 
    c.Counter, 
    c.Grades, 
    c.Classes 
FROM 
    Courses c 
    INNER JOIN Students s ON 
     c.id = s.Students_Id 

私が言及したい2つ目は、データベース設計が少し気になるということです。まず、のid列をStudents_ID列のStudentsに結合するのはなぜですか?もちろん、彼らは1対1です(彼らはそれぞれのテーブルのPKなので)。そうであれば、実際には1つのテーブルにする必要があります。

の値がある場合は、(PHPスクリプトを使用して)改行を表示するか、PHPスクリプトを作成してからしばらく時間がかかります。まずMySQLクエリツールでこれをチェックするのが最善です。

+0

ちょっとエリック、あなたの答えは間違いなく助けになっていましたが、マイケルが私の不自由な問題点を突き止めたので、私は上に行きました。あなたの助けをありがとう、私はそれを非常に感謝します。また、後でカーディナリティのためにすべてを壊そうとしていたので、私はDBをそのようにしました。私は、関係目的のために(FK)を忘れてしまった。私は間違いなくエイリアスを使用してあなたのアドバイスを取るでしょう:) – Cryotech

関連する問題