Read 161 times | Created 2013-02-14 02:43:11 | Updated 2013-02-15 02:48:05 | | |

 

<pre>
<?php  
/*********************************  
FILENAME  : high.score.php  
CREATE BY  : cahya dsn  
PURPOSE   : get highest score for each student
CREATE DATE : 2013-02-14
**********************************  
#table creation  

USE `test`;  

DROP TABLE IF EXISTS `tbl_nilai`;  
CREATE TABLE IF NOT EXISTS `tbl_nilai` (  
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key untuk table tbl_nilai',  
 `nama` varchar(30) NOT NULL COMMENT 'nama siswa',
 `kelas` tinyint(4) unsigned NOT NULL COMMENT 'kelas',
 `nilai` float NOT NULL DEFAULT 0.0,  
 PRIMARY KEY(`id`)  
) ENGINE=MyISAM COMMENT='tabel untuk menyimpan data nilai';  

INSERT INTO `tbl_nilai`(`id`,`nama`,`kelas`,`nilai`) VALUES
(1,'Susi',5,40),
(2,'Susi',4,60),
(3,'Indah',3,70),
(4,'Intan',2,80),
(5,'Indah',1,80),
(6,'Intan',6,80),
(7,'Intan',3,70);
*/
//function to show grid data
function show_grid($db,$sql,$no=0,$source=0){
  $data=array();
  if($result=$db->query($sql)){  
    $data=array();
    while($records=$result->fetch_object()){
      $data[]=$records;
    }
    $result->close();
  }else{
    $data[]=array('error'=>$db->error);
  }
  if(!$source){
    echo "QUERY [$no]:n  $sqlnDATA :n";
    print_r($data);
  }
  if(isset($data[0]->id))
  {
    echo "</pre><table border='1'>n"
        ."<tr><th>no</th><th>nama</th><th>kelas</th><th>nilai</th></tr>n";
    foreach($data as $row){
      echo "<tr>"
          ."<td>".$row->id."</td>"
          ."<td>".$row->nama."</td>"
          ."<td>".$row->kelas."</td>"
          ."<td>".(isset($row->nilai_max)?$row->nilai_max:$row->nilai)."</td>"
          ."<tr>n";
    }
    echo "</table><pre>n";
  }
  echo "//==========================n";
}
//database configuration  
$dbhost='localhost';  
$dbuser='root';  
$dbpass='';  
$dbname='test';  
//database connection  
$db=new mysqli($dbhost,$dbuser,$dbpass,$dbname);  
//=============[0]
$sql="SELECT * FROM tbl_nilai";
show_grid($db,$sql,0,1);
//=============[1]
// grouping tidak bisa dilakukan karena kalusa ORDER By terletak di depannya
$sql="SELECT * FROM tbl_nilai  ORDER BY nilai GROUP BY nama";
show_grid($db,$sql,1);
//=============[2]
// tampilkan hanya data nilai tertinggi 
// - tampilkan id,nama,kelas,nilai yg berelasi dengan data tersebut
// - jika ada 2(atau lebih) nilai tertinggi yang sama, maka tampilkan
//   semuanya
$sql="SELECT * FROM tbl_nilai WHERE nilai=(SELECT MAX(nilai) FROM tbl_nilai)";
show_grid($db,$sql,2);
//=============[3]
// tampilkan data nilai tertinggi dari masing-masing siswa,
// dan berdasarkan kelas
// - tampilkan id,nama,kelas,nilai,nilai_tertinggi 
//  (belum tentu berelasi dengan data tersebut)

$sql="SELECT *,MAX(nilai) as nilai_max FROM tbl_nilai GROUP BY nama,kelas";
show_grid($db,$sql,3);
/*=============[4]
// tampilkan data nilai tertinggi dari masing-masing siswa
// - tampilkan id,nama,kelas,nilai yg berelasi dengan data tersebut
// - tampilkan hanya salah satu record data jika ditemukan 
//   2(atau lebih) nilai tertinggi yg sama utk satu siswa 
===============*/
$sql="SELECT a.* FROM tbl_nilai a WHERE a.nilai=
       (SELECT MAX(b.nilai) FROM tbl_nilai b WHERE b.nama=a.nama) 
      GROUP BY a.nama ";
show_grid($db,$sql,4);
//===========
$db->close();
?>