0
我有一個SQL查詢很多連接。事實是,在查詢必須加入StudentClass表和Class表之前,它輸出的行數應該是4行。但是當我包含Class和StudentClass表時,它仍然輸出4行時輸出6行。問題是,如果一個學生需要兩個模塊並且分爲兩個班級,那麼它會輸出4個模塊,即2個模塊重複,4個班級重複2個班級。爲什麼會發生這種情況,我設置表的方式有問題嗎?還是查詢?查詢輸出更多的記錄比它應該做的
下面是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>
我要顯示的查詢結果和我有一個word文檔了表。我怎樣才能附加一個單詞文件的方式,這樣你就可以打開單詞文件,如果你想?
謝謝
這是代碼重載。嘗試最小化代碼量,並只顯示相關的代碼片段 –
如果您要求SQL查詢問題,則不要包含5英里的PHP和HTML值......顯示導致問題的實際SQL,並可能是關於表結構的一些細節。 –
你想分組什麼?學生? StudentClass?你想要提取什麼信息(你可能想用'SELECT [field],[field],[field]'替換'SELECT *',因爲這會1)減少返回的數據量並且2)給我們一個想要提取的信息)。 – Tom