2017-08-09 47 views
0

我想從下面的查詢中迭代數組$code$per_section的值。我應該使用什麼循環方法?或者這是正確的做法?如何在查詢中迭代數組的值?

//total students 
    $count_query=mysql_query("select total_students from subject where teacherid = '$get_id'"); 
    while($count_row=mysql_fetch_array($count_query)){ 
    $total += $count_row['total_students']; 
    } 

    $query = mysql_query("Select code,total_students from subject where teacherid='$get_id'"); 
     while($result=mysql_fetch_assoc($query))){ 
     $section = ($result['total_students']/ $total)*30; 
     $per_section[] = round($section, 0, PHP_ROUND_HALF_UP); 
     $code[] = $result['code']; 
     } 

    //perform this statement for a number of times depending on the number of array of $code.. 
     $user_query=mysql_query("select * from result where subject_id ='$code' and faculty_id = '$get_id'LIMIT $per_section ")or die(mysql_error());     
     while($row=mysql_fetch_assoc($user_query)){ 
      ... 
     } 

的樣本數據: 主題表

code total_students teacherid 

IT230   45   11-0009 
IT213   44   11-0009 
IT214   40   11-0009 

結果表

subject__id faculty_id 

IT230   11-0009 
IT213   11-0009 
IT214   11-0009 

預期結果: 我想只顯示30條記錄,其結果表匹配的學生。

由於該教師的總學生45,44,40 = 129。這是$per_section

IT230僅需要學生=(129分之45)* 30 = 10.46或我只11的結果的需要。

IT213只需要學生=(44/129)* 30 = 10.23或我只需要10個結果。

IT214只需要學生=(40/129)* 30 = 9.3或我只需要9個結果。

我想搜索IT230中的記錄並只選擇其中的11個。 只有10個IT213和9個IT214。由於我只有3條記錄,只有這三條記錄纔會顯示出來。

+1

mysql_query在php5.6中被棄用,並且在php7中不被支持,使用PDO來替代http://php.net/manual/en/book.pdo.php – brianforan

+0

也使用準備語句http://php.net/manual/en /pdo.prepared-statements.php防止SQL注入 – brianforan

+0

不循環,加入這兩個表。 – Barmar

回答

0

使用一個查詢連接兩個表:

SELECT s.total_students, s.code, r.* 
FROM students AS s 
LEFT JOIN result AS r ON r.subject_id = s.code 
WHERE s.teacher_id = '$get_id' AND r.faculty_id = '$get_id' 
ORDER BY s.code 

然後你可以在一個循環中的所有信息:

while ($result = mysqli_fetch_assoc($query)) { 
    if (!isset($per_section[$result['code']]) { 
     $per_section[$result['code']] = round($result['total_student']/$total*30, 0, PHP_ROUND_HALF_UP); 
     $code[] = $result['code']; 
    } 
    if ($result['subject_id'] !== null) { 
     // do stuff with columns from result table here 
    } 
} 
+0

先生,我已經更新了我的問題代碼先生,因爲我忘記了包括它。謝謝。 – Eric

+0

您的第一個循環將無法工作,查詢返回的'$ row ['total_students']'沒有。 – Barmar

+0

更新爲$ result ['total_students']。仍然沒有運氣先生 – Eric

0

正如你的問題的評論中提到,它是通過PDOJOIN這兩個表格使用準備好的陳述要好得多:

$dbh = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password'); 

$stmt = $dbh->prepare(' 
    SELECT result.* 
    FROM result 
    JOIN student ON result.subject_id = student.code 
    WHERE student.id = :id 
'); 

$stmt->execute(['id' => $id]); 
$results = $stmt->fetchAll(PDO::FETCH_ASSOC); 
+0

在不久的將來,我會練習那些東西,但在此之前,我已經更新了我的問題代碼先生,因爲我忘記了包含它。 – Eric