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…






