2013-11-02 4 views
0

У меня есть табличное имя «Table1» со следующими записями студентов.Как распечатать результат всего класса

student_id | Name | Math | English | Sience | Class 
1   John 100 90  89  std two 
2   Simon 100 100  100  std two 
3   Irene 80  70  70  std two 

Я попытался вывести AVG, Total каждого студента PassMark, но я не из положить результат всех классов.

Пример: на данный момент результат получается таким же, как при поиске.

student_id | Name | Math | English | Sience | Class Average Total 
1   John 100 90  89  std two 93  279 

и когда я ищу другой студент, я получаю желаемый ответ, но когда я ищу «СТД два» в качестве имени класса я получаю результат первого студента, который имеет 1 student_id вместо этого всего класса. Ответ, который я хочу, похож на этот или любой формат, но должен выводить результат всего класса.

student_id | Name | Math | English | Sience | Class Average Total 
1   John 100 90  89  std two 93  279 

student_id | Name | Math | English | Sience | Class Average Total 
2   Simon 100 100  100  std two 100  300 

student_id | Name | Math | English | Sience | Class Average Total 
3   Irene 80  70  70  std two 73.3 220 

Это мой PHP код

<?php 


//include mysql connect 
    $query='query'; 

    if (isset($_GET['query'])) 
{  
    $query=$_GET['query']; 


     } 

    $min_length = 2; 
    // you can set minimum length of the query if you want 

    if(strlen($query) >= $min_length){ // if query length is more or equal minimum 
    length 
    then 


    $query = htmlspecialchars($query); 

    // changes characters used in html to their equivalents, for example: < to &gt; 

    $query = mysql_real_escape_string($query); 
    // makes sure nobody uses SQL injection 



    $raw_results = mysql_query("SELECT *, AVG(math+english+science)/3 as 
    Average, (math+english+science)as Total from table1 
    WHERE (`name` LIKE '%".$query."%') or (`class` LIKE '%".$query."%')") or 
    die(mysql_error()); 

    // '%$query%' is what we're looking for, % means anything, for example if $query 
    is Hello 
    // it will match "hello", "Hello man", "gogohello", if you want exact match use 
    `title`='$query' 
    // or if you want to match just full word so "gogohello" is out use '% $query %' 
    ...OR ... '$query %' ... OR ... '% $query' 
    if(strlen($query) >= $min_length){ 
     // if query length is more or equal minimum length the 

    if(mysql_num_rows($raw_results) >= 0){ 
    // if one or more rows are returned do following 


     // $results = mysql_fetch_array($raw_results) puts data from database into 
    array, while it's valid it does the loop 

        while($results = mysql_fetch_array($raw_results)){ 

//The echo table   


echo "<table width='500' height='2' cellpadding='2' cellspacing='0' border='0'>"; 
echo"<tr><td>Id_number</td><td>Name</td><td>Math</td><td>English</td><td>Science</td>  
<td>Class</td><td>Average</td><td>Total</td>"; 
echo "<tr>"."<td>".$results["student_id"]."</td>"."<td>".$results["name"]."</td>"." 
<td>".$results["math"]."</td>"."<td>".$results["english"]."</td>"." 
<td>".$results["science"]."<td>".$results["class"]."<td>".$results["Average"]."</td>"." 
<td>".$results["Total"]."</td>"."</p>"; 
echo"</table>"; 




     } 

    } 
      } 


     } 





    ?> 
+0

Не вызывайте 'AVG'. Это для усреднения по строкам, а не для усреднения по столбцам. Просто разделите общее количество на 3, и это среднее. – Barmar

+0

[** Образец **] (http://sqlfiddle.com/#!2/e18bc1/4/1). [Что делает AVG?] (Http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_avg) – Prix

+0

Кстати, вы можете изменить '

ответ

1

Изменить

AVG(math+english+science)/3 

в

ROUND((math+english+science)/3) 

AVG является агрегатная функция, это средние значения всех выбранных строк, или все строки в группе, когда вы используете GROUP BY. Если вы просто хотите, чтобы среднее из 3 столбцов в одной строке, просто добавьте их и разделите на количество столбцов.

+0

на что? это причина? – Haika

+0

Хорошо! Я получаю u, позвольте мне попробовать – Haika

+0

Спасибо, много Бармар, ваш гений – Haika

Смежные вопросы