Kaskus

Tech

smartparentsAvatar border
TS
smartparents
[ASK] PDO - MYSQL Gabungkan row dengan Datetime dan Average
Help suhu-suhu PHP dan MySQL

Ane punya tabel hasilnya seperti ini:
[ASK] PDO - MYSQL Gabungkan row dengan Datetime dan Average

Itu hasil di tabel pertama adalah Join 3 tabel:
Tabel induk:
myproyek
columns: proyek_id, proyek_nama

Tabel Detail:
proyek_detil
columns: detil_id,proyek_id, nilai, buyer_id, st_proyek,end_proyek,status

Tabel Klien:
mybuyer
columns: buyer_id, nama_buyer

PDO Join tabel
Code:
public function joinProyekX($status)
{

$this->xconn();
try{
$stmt = $this->db->prepare("SELECT * FROM proyek_detil JOIN myproyek ON myproyek.proyek_id = proyek_detil.proyek_id LEFT OUTER JOIN mybuyer ON proyek_detil.buyer_id= mybuyer.buyer_id WHERE myproyek.status != :st ORDER BY proyek_detil.proyek_id");
$stmt->bindParam(':st', $status);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
catch (PDOException $e){

}
}


PHP untuk view
Code:

$arraydata = $classdb->joinProyekX('canceled'); //status: done, pending, canceled

//tabel head untuk Datatables
$str = '';
$no = 0;
foreach ($arraydata as $r) {
$no++;
$str .= '<tr><td>'.$no.'</td>
<td>'.$r[proyek_nama'].'</td>
<td>'.$r['nilai'].'</td>
<td>'.$r['nama_buyer'].'</td>
<td>'.$r['st_proyek'].'</td>
<td>'.$r['end_proyek'].'</td></tr>';
}
echo $str;


Ane pengen proyek yang sama digabungkan menjadi 1 row saja dengan prinsip:
- Grup berdasarkan nama proyek (dari "proyek_id", primary key)
- untuk "Start" , skip null atau empty, pilih tgl yang paling awal ("st_proyek", datetime) -> Pada proyek A, start paling awal 3 Jan 2016
- untuk "End" , skip null atau empty, pilih tgl yang paling akhir ("end_proyek", datetime) -> Pada proyek A, akhir terdekat 29 Jan 2016
- untuk "Nilai", skip null atau empty, average dari bbrp row yang punya nilai. Contoh di atas-> (400.000+420.000)/2 hasilnya 410.000

Gambarannya yang diinginkan seperti ini
&#91;ASK&#93; PDO - MYSQL Gabungkan row dengan Datetime dan Average

Memakai "GROUP BY proyek_detil.proyek_id" memang akan menggrup proyek, tapi tetap saja masih perlu filter berdasarkan tanggal terdekat/terjauh lalu melakukan average. Nah ini ane belum ketemu solusinya.

Ane berpikir seperti ini:
Tidak perlu join beberapa tabel di awal. Select dari "myproyek". Dari loop hasilnya, select join "proyek_detil", jika row setiap "proyek_id" lebih dari satu, bandingkan datetime, dan lakukan average jika "nilai" punya value berbeda

Tapi Select dalam loop tidak direkomendasikan. Apalagi akan banyak eksekusi fungsi dalam loop utk mencari tanggal terdekat/terjauh dan average.

Ada solusi gan suhu?
Diubah oleh smartparents 08-08-2016 15:49
0
816
2
GuestAvatar border
Komentar yang asik ya
Mari bergabung, dapatkan informasi dan teman baru!
Programmer Forum
Programmer Forum
KASKUS Official
20.3KThread5.2KAnggota
Urutkan
Terlama
GuestAvatar border
Komentar yang asik ya
Ikuti KASKUS di
© 2026 KASKUS, PT Darta Media Indonesia. All rights reserved.