Read 371 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(); ?>