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
806
2
GuestAvatar border
Komentar yang asik ya
Urutan
Terbaru
Terlama
GuestAvatar border
Komentar yang asik ya
Komunitas Pilihan