2012-01-09 50 views
1

我有以下代碼來執行JOINED表的動態查詢,但由於某種原因,每當我嘗試顯示行時,它只顯示前9行然後停止。顯示的SQL行由於JOINED表的原因而受到限制

$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 />'; 
} 

我測試的JOIN SQL語法在phpMyAdmin,雖然它返回是一個積極的任務,我注意到,它只有顯示原始表格而不是連接後的連接表格。

任何關於我哪裏出錯的建議?我只顯示代碼的這一部分,因爲一切正常,當我刪除JOIN語法時它的工作很好,所以我導致相信加入導致了問題,但我看不到我在做什麼錯誤。

編輯,以顯示SQL架構:

當然,希望下面的幫助。

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」。這實際上是錯誤的。我不再選擇這些領域。

當連接表時,是否每列都必須有數據按順序成功INNER JOIN或是否還有空行?

+0

您可以將數據庫模式添加到問題嗎? – 2012-01-09 20:38:32

+1

我不確定我瞭解你的模式。課程1屬於學生克里斯,課程2至仁等? – bfavaretto 2012-01-09 21:09:42

回答

2

您的查詢顯示您正在加入Courses表中的idStudents中的Students_Id匹配的地方。但是,該架構使其看起來好像id實際上不是學生標識符,而只是該表中的記錄索引。在我看來,您需要爲Students表的密鑰在Courses中增加一列。

我測試了phpMyAdmin中的JOIN SQL語法,雖然它作爲一個積極的任務返回,但我注意到它只在連接後顯示原始表而不是連接表。

請注意,您只是通過查詢來選擇包含在Courses表中的列。你可能也想選擇Students.FirstNameStudents.LastName(或類似的東西)。

+0

啊,我現在看到。我完全忘記了關於選擇位的(FK)和好點,我甚至沒有想過。感謝您的幫助! – Cryotech 2012-01-09 21:26:40

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 

我提到的第二件事是,你的數據庫設計是有點令人擔憂。首先,你爲什麼要加入idCoursesStudents_IDStudents?當然,除非他們是一對一的(因爲他們是各自表格的PK)。如果是這樣,那麼他們應該只是一張桌子。但是,如果Grades列中有任何null值,您將得到顯示換行符(使用您的PHP腳本),或者可能會出錯(自從我執行PHP腳本以來已有一段時間了)。最好先在MySQL查詢工具中檢查它。

+0

嘿埃裏克,你的回答絕對有幫助,但我與邁克爾的上面一起去了,因爲他指出了我的蹩腳問題。感謝您的幫助,但我非常感謝。另外,我這樣做了我的數據庫,因爲我的意圖是稍後將其分解爲基數。我只是爲了關係目的而忘記了(FK)。我肯定會採用你的建議使用別名:) – Cryotech 2012-01-09 21:29:58