MySQL memang cocok banget waktu dipasangin dengan php apalagi sekarang fungsi didalam php untuk MySQL sudah built in. Entah mulai versi berapa yang pasti seh di php5 tidak memerlukan extensions lagi untuk MySQL. Saking cocoknya php dengan MySQL beberapa programmer php melupakan bahwa MySQL memiliki fungsi yang sudah built in yang memberikan kita kemudahan dalam melakukan beberapa pengolahan data. Yup…. data adalah hal yang paling penting dalam database. Tanpa data tidak akan ada informasi. Betul nda??huehuehe… Bahasanya nyantai aja yach… jangan yang terlalu formal. Bayangin kalau kita bisa menggunakan fungsi yang ada dalam MySQL tentunya kita bisa membuat distribusi pekerjaan antara database server dan webserver kita dan tentunya web yang kita buat juga semakin powerful…. Betul nda??? Yakin aja dech!!! Heheeh…….. penulis menyadari hal ini sewaktu melihat senior yang juga suhu penulis yang lagi nyusun skripsinya… makacih banget uda buka mataku tentang MySQL. Yup katanya makaci juga,heheheh……
Hal yang paling krusial dan yang mau saya bahas adalah yang menyangkut masalah waktu… yup waktu… kenapa waktu karena kebanyakan beberapa table dibuat kolom untuk waktu dengan tipe data string(varchar). Kalau waktu tidak menjadi data masukan penting dalam pengolahan data, is ok lah!!! Tapi bagaimana jika waktu menjadi data masukan penting bagi pengolahan data… bisa repot kita kalau menggunakan tipe data varchar untuk kolom waktu…. Repot?? Yup repot jika kita mengandalkan php sebagai pemroses utama karena kita akan berhadapan dengan algoritma lagi untuk memprosesnya…. Padahal MySQL uda nyiapin fungsinya sendiri.
Kalau mau nampilkan tanggal dalam php kita gunakan fungsi $waktu = date("d-m-Y H:i:s") dan akan tercipta waktu(misalnya) : 01-10-2007 21:30:20 dan setelah decompile oleh php data yang udah ada ini kita masukin ke MySQL misalnya dengan query INSERT INTO table(kolom1,kolom2,….) VALUES(‘$waktu’,…….) dan data telah dimasukkan ke MySQL dengan data waktu yang dibuat oleh php. Hmmm……. cara ini emang benar tapi gmn kalau data ini akan kita proses, misalnya kita ambil tanggalnya maka kita harus gunakan fungsi diphp misalnya kita ambil data di dalam table dan kita masukkan ke $waktu_proses maka kita akan gunain fungsi string substr ( string string, int start [, int length] ). Misalnya scriptnya menjadi : $tanggal = substr($waktu,0,2) dan akan tercipta output 01. Yup sekilas emang seh nda rumit, karena data yang diperlukan masih kecil bayangin kalau kita mau nampilin nama harinya… nah loh bingung kan!!!!
Oke penulis punya suatu cara yang simple, kenapa simple??karena kita akan gabungin fungsi diphp dengan fungsi di MySQL. Yup prosesnya terpisah ada dua server yang mengerjakannya yaitu web server dan database server. Dan penulis yakin ini akan lebih cepat.
Oke langsung aja yach…..
Yang pertama yang perlu diperhatikan adalah settingan waktu antara webserver dan database server kita jika waktu webserver dan database server kita sesuai dengan (misalnya GMT+07) yang kita inginkan yach emang kondisinya paling ideal. Dan waktunya mesti sama, waktu webserver mesti sama dengan waktu database server kita… knpa?? Karena jika beda output yang kita inginkan akan miss atau meleset.. knp??karena output waktu antara database server dan web server akan beda sehingga nda konsisten. Nah loh diulang lagi!!!heheh……..
Oke kita anggap aja kondisinya sudah ideal,webserver dan databaseserver memiliki zona waktu yang anda inginkan dan keduanya memiliki waktu yang sama.
Kita lanjut ke bagian pemasukkan data. Hal yang paling penting di database yaitu pemilihan tipe data karena kita mau masukkin data dengan waktu yang lengkap yaitu dari tanggal sampai ke detiknya maka pilihan data yang tepat yaitu datetime. Yup datetime akan merekam waktu dengan lengkap dari tanggal sampai detik. Waktu yang direkam yaitu waktu di database server anda. Ok jika tipe data nya uda benar maka untuk kita harus memperhatikan format waktu yang digunakan dalam MySQL anda. Jika anda menggunakan PHPMYADMIN sebagai interface MySQL anda maka anda bisa melihat opsi • Show MySQL system variables dihalaaman utama PHPMYADMIN dan anda bisa melihat system variable dari MySQL anda mulai dari date format,datetime format,time format dll. Nah misalnya datetime format dari MySQL anda adalah %Y-%m-%d %H:%i:%s maka anda akan mendapat waktu,misalnya 2007-06-22 21:44:00. Sudah sampai disini, ada pertanyaan???hehehe…. yang sudah master jangan nanya dunx penulis masih cupu negh coding php nya….. udah sekarang kita lanjutin aja..
Setelah tipe data uda genah maka kita akan lanjut ke memasukkan data ke MySQL nya. Jika diawal kita perlu banyak proses diphp mulai dari penggunaan fungsi date() dan formatnya dilanjutkan querynya lagi maka jika kita manfaatin fungsi built in di MySQL maka kita hanya butuh query. Yup query…. Kenapa query??karena didalam query kita bisa memasukkan fungsi MySQL. Misalnya kita akan memasukkan data waktu sekarang mulai dari tanggal sampai detik maka kita hanya perlu query INSERT INTO table(kolom1,kolom2,….) VALUES(now(),…….) yup hanya dengan query ini maka kita udah memasukkan data waktu mulai dari tahun sampai detik sesuai dengan format datetime MySQL anda. So easy and simple, yang anda butuhkan hanya query, anda tidak perlu fungsi tambahan di php seperti date() dan yang lainnya. Sekarang jika kita mau menampilkan data dari table, misalnya mau menampilkan tanggalnya, maka caranya juga gampang seperti tadi. Yah cuma butuh query, kita tidak perlu repot repot mengambil data dari table kemudian menampungnya di variable dan mengambil substring dari variable,,,kebanyakan tau!!! Yang kita butuhkan hanya query!!! Yup Cuma query!!! Nda percaya??? Penulis buktikan yach!!! Data yang uda kita masukin tadi, misalnya di nama tabelnya tabel1 dan nama kolomnya kolom1 maka kita hanya butuh query SELECT dayofmonth(kolom1) FROM tabel1. dan boom… data yang diberikan oleh MySQL sudah berupa tanggal dalam 1 bulan jika datanya 2007-06-22 21:44:00 maka MySQL akan memberikan data 22. mudah kan??? Kita nda perlu repot repot mengambil data dari table kemudian menampungnya di variable dan mengambil substring dari variable…. Dgn cara begini aplikasi kita akan semakin powerful…percaya kan??
Ok beberapa fungsi date/time MySQL yang dapat anda gunakan seperti :
1. dayofweek() fungsi ini akan mengembalikan nilai int yang merupakan hari dalam satu minggu.
2. dayofmonth() fungsi ini akan mengembalikan nilai int yang merupakan hari dalam satu bulan.
3. dayofyear() fungsi ini akan mengembalikan nilai int yang merupakan hari dalam satu tahu dengan range 1-366.
Sekarang bagaimana jika kita mau nampilkan nama hari dari data 2007-06-22 21:44:00??? Kalau kita ngandalin php saja maka kita akan repot banget karena penelusuran saya di manual php di generate pada tanggal 03 00:56:38 2007 saya tidak mendapatkan fungsi built in nya dan jika kita ngandalain php saja maka kita akan direpotkan dengan algoritma yang harus kita buat untuk mendapatkannya. Yup, algoritma kita buat dan kita sudah meghabiskan waktu yang lumayan banyak, belum lagi pekerjaan lain yang menunggu kita. Pekerjaan lain seperti makan, minum, mandi, tidur, ngerjain tugas kuliah dan lain lain,heheh…. Nda kok canda!!!
Uda ah candanya balik lagi ke masalah menampilkan nama hari… Melihat kerepotan yang akan ditimbulkan oleh masalah ini maka penulis menyarankan menggunakan fungsi yang sudah MySQL buat yaitu fungsi dayname() . Yup dayname(), dengan fungsi ini kita nda perlu repot repot buat algoritma yang panjang, kita hanya butuh query dengan fungsi dayname()… penulis contohin nih , misalnya di nama tabelnya tabel1 dan nama kolomnya kolom1 maka kita hanya butuh query SELECT dayname(kolom1) FROM tabel1 dan boommmm lagi…. Kita dapatin nama harinya… yup nama harinya dalam bahasa inggris(tau bhs inggris kan???heheh!!!) maka kita cukup direpotkan saja dengan konversi dari nama hari dalam bahasa inggris ke bahasa yang akan kita tampilkan(mau bhs jawa,bhs melayu,dan bhs lain).. yah tentunya code untuk konversinya ditulis dalam php dung….. mudah bukan??
Oh iya satu tips lagi dari penulis… sewaktu semester 3 penulis dan teamnya mengerkjakan tugas suatu mt kuliah yang asyik bgt yaitu Rekayasa Perangkat Lunak(RPL) yang dosennya asyik bgt juga!!! Heheh…. Maaf nih pak ada dimasukin!!! Di sini kami buat modul untuk SI Hotel yaitu cek in dan cek out nya.. masalahnya kami kebingungan untuk menghitung banyak hari tamu menginap… setelah mencari (sampai tugas tu dikumpulin team kami belum berhasil juga nemukan caranya,hehehe….) dan akhirnya mendapatkannya penulis mendapatkan algoritma didalam ebook PHP 5 in Practice By Elliot White III, Jonathan Eisenhamer yang diterbitkan oleh Sams disini ditulis caranya yang panjang, mau lihat codenya?? Dibawah ni :
Listing 3.1.1. Number of Days Between Two Dates
// Set the default timezone to US/Eastern
date_default_timezone_set('US/Eastern');
// Will return the number of days between the two dates passed in
function count_days($a, $b) {
// First we need to break these dates into their constituent parts:
$a_parts = getdate($a);
$b_parts = getdate($b);
// Now recreate these timestamps, based upon noon on each day
// The specific time doesn't matter but it must be the same each day
$a_new = mktime(12, 0, 0, $a_dt['mon'], $a_dt['mday'], $a_dt['year']);
$b_new = mktime(12, 0, 0, $b_dt['mon'], $b_dt['mday'], $b_dt['year']);
// Subtract these two numbers and divide by the number of seconds in a
// day. Round the result since crossing over a daylight savings time
// barrier will cause this time to be off by an hour or two.
return round(abs($a_new - $b_new) / 86400);
}
// Prepare a few dates
$date1 = strtotime('12/3/1973 8:13am');
$date2 = strtotime('1/15/1974 10:15pm');
$date3 = strtotime('2/14/2005 1:32pm');
// Calculate the differences, they should be 43 & 11353
echo "
There are ", count_days($date1, $date2), " days.
";echo "
There are ", count_days($date2, $date3), " days.
";?>
Banyakkan??? Nah setelah coba coba mengoprek MySQL penulis mendapatkan cara yang mudah yang memanfaatkan fungsi di MySQL. Fungsi yang digunakan yaitu dayofyear(). Kenapa fungsi ini??karena tanggal untuk 1 tahun akan terus bertambah dan tidak akan berulang dengan range 1-366 dan hal ini berarti kita cukup mengambil dayofyear() dari kolom cek in dan dayofyear() dari kolom cek out dan kalkulasikan tanggalnya dengan cara menguranginya….. mudah bukan??? Emang sich cara ini punya kelemahan. Kelemahannya jika tamu menginap di akhir tahun maka tanggal dalam tahun akan berulang kembali… tapi cara ini cukup mempermudah jika asumsi penginapan tidak berbeda dalam 1 tahun(kalau bhs kerennya cross year!!betul nda ya??pasti semua mikir penulis sok tahu!!!heheheh… maklum masih muda).
Yup masih banyak fungsi date/time function di MySQL yang dapat digunakan… untuk lebih jelasnya lihat manual dari MySQL…
Sekian dari penulis jika ada kekurangan dimaafin, jika ada saran, kritik atau sanggahan silahkan hubungi penulis di email vry_27@yahoo.co.id
Very
Wassalam….
Sumber : MySQL/PHP Database Applications, Jay Greenspan and Brad Bulger Published by M&T Books
Always expand your skill and beware of euphoria because it will kill you guys!!!
2 komentar:
tanya Om, misal kita sudah punya database dengan kolom datetime dengan format yyyy-mm-dd hh:mm:ss. lalu kita bikin form edit. Nah gimana caranya di form edit tadi: yyyy-mm-dd dan hh:mm dipisah. masing masing masuk ke textbox yang terpisah. Script value="" itu yg ku tak tahu misahinnya. supaya yyyy-mm-dd masuk ke textbox1 dan hh:mm masuk ke textbox2. thanks ya. email ke sini ya (beyond2050@yahoo.co.id)
thx gan...
jadi dapet fungsi buat mencari nama hari dari tanggal...:)
Posting Komentar