2011-01-25 56 views
0

我有一個腳本,旨在打印已累計超過3個時間的學生的價值觀。我想這個腳本打印出兩個學生的名字,與時代他們一直遲遲量,但到目前爲止,我一直只能夠與下面的腳本打印出他們的名字:如何將SQL計數數據和數組數據一起發送?

$sql = "select DISTINCT StudentID,classid,date from attendance_main where status = 'Tardy' AND classid like '%ADV%'"; 
$result = mysql_query($sql) or die (mysql_error()); 
while($row=mysql_fetch_array($result)) { 
     $studentid = $row['StudentID']; 
     $sql2 = "select distinct StudentID,classid,date from attendance_main where StudentID = '$studentid' AND status = 'Tardy' AND classid like '%ADV%'"; 
     $result2 = mysql_query($sql2) or die (mysql_error()); 
     while($row2=mysql_fetch_array($result2)) { 
       $tardycount = mysql_num_rows($result2); 
       $studentid = $row2['StudentID']; 
       if($tardycount >= 3) { 

           $sql3 = "select * from students where rfid = '$studentid'"; 
           $result3 = mysql_query($sql3) or die (mysql_error()); 
           while($row3=mysql_fetch_array($result3)) { 
             $fname[] = $row3['fname']; 
           } 
         } 
       } 
     } 


$newdata = array_unique($fname); 
foreach ($newdata as $value) { 
     echo $value; 
} 

我想不到如何直觀地做到這一點。在while循環中保留所有內容不起作用(儘管請求唯一條目,我仍然爲同一個學生提供了多個結果),所以使用array_unique是我能想到的唯一方法。

感謝您的幫助!

+0

請添加您的表格佈局。乍一看,如果你真的只想打印出學生的名字和他們遲到的次數,你的PHP腳本解決方案看起來太複雜了。如果這是它的原因,它應該很容易在一條SQL語句中實現,然後您可以使用PHP處理任何需求。 – Bjoern 2011-01-25 06:44:57

回答

1

你可以(也應該)在SQL中做幾乎所有事情。它應該看起來像這樣。

select StudentID, classid, date count(*) 
from attendance_main 
where status = 'Tardy' AND classid like '%ADV%'" 
left join student on student.rfid = attendance_main.StudentId 
group by StudentId 
having count(*) > 3; 

這是它的工作原理。

  1. 選擇您想與之合作的結果:

    選擇StudentID,CLASSID,日期COUNT(*) 從attendance_main 那裏狀態= '遲到的' AND CLASSID LIKE '%ADV%'」

  2. 加入學生的成績在普通ID

    設置留在student.rfid = attendance_main.StudentId

  3. 攜手助學
  4. 一切由學生組成。我們使用count(*)來獲取項目的數量。由於select中的where子句,我們知道我們只處理tardies。

    組由StudentId

  5. 限制結果來僅tardies上面3與具有claues(這是由像where子句爲組),具有計數

    (*)> 3;

4

事情是這樣的:

SELECT 
    attendance_main.StudentID, 
    students.fname, 
    COUNT(attendance_main.*) AS `times_tardy` 
FROM 
    attendance_main 
INNER JOIN 
    students 
ON 
    attendance_main.StudentID = students.rfid 
WHERE 
    attendance_main.status = 'Tardy' 
AND 
    attendance_main.classid like '%ADV%' 
GROUP BY 
    attendance_main.StudentID 
HAVING 
    `times_tardy` > 3 

連接兩個表可以讓你的遲到數和學生在一個查詢名稱,以及GROUP BY和HAVING子句讓你只有學生超過3個遲緩項。

+0

非常感謝。我還是比較陌生的SQL查詢,我遇到了以下問題: 您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊,在'*)AS`times_tardy`附近使用正確的語法FROM attendance_main t1 INNER JOIN學生t2 ON t'在第4行 我是愚蠢的,還是有一個錯字在那裏面? – 2011-01-25 06:48:30

相關問題