Tag Archive | "MySQL"

Tags:

Menggunakan type data mysql yang baik, perlukah?


Ketika membuat sebuah database, pada masing2 tabel nya kita buat kolom yang memang sesuai dengan type datanya, hal ini penting karena saat melakukan order by, mysql secara default akan memperlakukan data sesuai type datanya.

Sebagai contoh anggaplah kita akan membuat database mahasiswa,

CREATE DATABASE `mahasiswa` ;
 
CREATE TABLE `data_mahasiswa` (
`nis` INT( 10 ) NOT NULL ,
`nama` VARCHAR( 100 ) NOT NULL ,
`umur` TINYINT NOT NULL ,
PRIMARY KEY ( `nim` )
) ENGINE = MYISAM ;
 
INSERT INTO `data_mahasiswa` ( `nim` , `nama` , `umur` )
VALUES
('02510010', 'Nama Siswa 1', '24'),
('02510012', 'Nama Siswa 2', '8'),
('02510013', 'Nama Siswa 3', '7'),
('02510015', 'Nama Siswa 4', '5'),
('02510018', 'Nama Siswa 5', '31'),
('02510019', 'Nama Siswa 6', '11'),
('02510011', 'Rudi Hermawan', '13')
;

Disini umur mempunyai type data TINYINT, mysql membacanya sebagai bilangan integer/bilangan bulat sehingga jika diurutkan dari kecil kebesar dengan order by ASC hasilnya benar

SELECT *
FROM `data_mahasiswa`
ORDER BY `data_mahasiswa`.`umur` ASC

Hasilnya : 5 7 8 11 13 24 31

atau dari umur terbesar ke umur terkecil dengan order by DESC


SELECT *
FROM `data_mahasiswa`
ORDER BY `data_mahasiswa`.`umur` DESC

Hasilnya : 31 24 13 11 8 7 5

Nah bagaimana jika kolom umur dijadikan varchar, perintah untuk menggantinya adalah

ALTER TABLE `data_mahasiswa` CHANGE `umur` `umur` VARCHAR( 4 ) NOT NULL

Jika di urutkan dari kecil ke besar (ASC)
hasilnya : 11 13 24 31 5 7 8

Jika di urutkan dari besar ke kecil (DESC)
hasilnya : 8 7 5 31 24 13 11

Kenapa bisa begitu, karena kolom umur oleh mysql dianggap sebagai string (varchar) sehingga angka 8 menjadi lebih besar dari 13, dan angka 11 akan dianggap lebih kecil dari 8.

Kesimpulannya adalah jika membuat suatu database harap perhatikan betul type datanya.

Kalau sudah terlanjur dan anda tidak ingin merubah tipe datanya, dan kita ingin merubah type string menjadi angka, caranya pakai Cast Functions and Operators di mysql.
Contoh :

SELECT *
FROM `data_mahasiswa`
ORDER BY CAST(`umur` AS SIGNED) ASC

Atau


SELECT *
FROM `data_mahasiswa`
ORDER BY CONVERT(`umur`, SIGNED) ASC

keterangannya adalah CAST(expr AS type), CONVERT(expr,type) dimana expr merupakan kondisi bilangan yang akan di convert, sedangkan type adalah convert tujuan yang terdiri dari:

BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

Semoga informasi ini berguna…

Posted in MySQLComments (2)

Tags: ,

Membuat range date Mysql dengan PHP


Kali ini saya mempunyai kasus yaitu :
Jika saya mempunyai dua tanggal
$tanggalAwal = ‘2008-05-15′;
$tanggalAkhir = ‘2008-06-15′;
Bagaimana menampilkan range date dari tanggalAwal sampai tanggalAkhir seperti :
2008-05-15
2008-05-16
2008-05-17
2008-05-18
dst sampai 2008-06-15

Untuk membuatnya, saya eksperimen dengan membuat file PHP dengan nama test.php
Quick Code


< ?php
// Koneksi ke database mysql
$dbHost = 'localhost';
$dbUser = 'root';
$dbPass = '';
 
$dbConn = mysql_connect ($dbHost, $dbUser, $dbPass) or die ('MySQL connect failed. ' . mysql_error());
 
$tanggalAwal = '2008-05-15';
$tanggalAkhir = '2008-06-15';
 
//Mencari selisih tanggal dengan DATEDIFF
$sql="SELECT DATEDIFF('$tanggalAkhir','$tanggalAwal') as selisih";
$result = mysql_query($sql,$dbConn);
$row = mysql_fetch_assoc($result);
$slsh = $row['selisih'];
echo 'Selisih tanggal awal dan akhir adalah '.$slsh;
echo '<br>';
 
//Menampilkan tanggal dengan DATE_ADD dan INTERVAL 1 DAY
$tanggal=$tanggalAwal;
echo $tanggal;
echo '<br />';
if ($slsh > 0) {
    for($i=1;$i< =$slsh;$i++){
    $sqlIn="SELECT DATE_ADD('$tanggal', INTERVAL 1 DAY) as intervalDay";
    $resultIn = mysql_query($sqlIn,$dbConn);
    $rowIn = mysql_fetch_assoc($resultIn);
    $tanggal=$rowIn['intervalDay'];
    echo $tanggal;
    echo '<br>';
    }
} else {
  echo 'Tanggal akhir harus lebih besar daripada tanggal awal';
}
?>

Nah keluar kan, kita tidak perlu membuat tabel di mysql.
Dari kode tersebut kita dapat mengembangkan untuk membuat array/menampilkan range menit, detik, jam, hari, bulan dst, yaitu tinggal mengganti INTERVAL nya.
Kalau kita ingin menampilkan dari tanggal besar ke kecil tinggal mengganti DATE_ADD menjadi DATE_SUB. Mudah khan…

Demikian, jika ada yang tau cara menampilkan range date yang lain silahkan kirim di menu comment ya..
Cz saya cari-cari di manual mysql dan browsing2 ga nemu2, adanya cuma mengambil range date dari tabel di mysql. Kalau menggunakan PHP fungsi menampilkan range datenya juga ga ketemu…
Karena bisanya ini, saya share dengan pembaca, di kommenin yach..

thx

Posted in MySQLComments (6)

  • Popular
  • Comments
  • Tags
  • Subscribe
Advertise Here

Category

Tag Cloud