Saturday, 28 June 2014

Mengurutkan data pada MySQL (2)


Tulisan ini merupakan lanjutan dari:
Mengurutkan data pada MySQL

Masih seputar mengurutkan data. Sebelumnya dengan menggunakan queri hasil yang didapat sesuai gambar berikut :
Gambar 1. Queri masih belum sempurna


Dapat dilihat bahwa urutan masih belum sempurna, seperti 2.80 lebih dulu dibanding 2.9. Dengan mengabaikan angka 2 didepannya, seharusnya angka 9 memperoleh posisi lebih dulu. Belum lagi pada id berkepala 2 (mudah-mudahan nggak serem kata-katanya :P ) seperti nomor 2.80.3, 2.80.25, dan 2.80.50 yang seharusnya urut seperti ini, bukan 25,3,50 yang masih berdasarkan karakter. Untuk itu kita akan menyempurnakannya.

Pertama kita ambil nilai sebelum titik atau keselurahan pada id yang tidak ada titik. Selanjutnya nilai pertama ini dibuat dua tipe, yaitu char dan integer. Sehingga tampak seperti gambar berikut :
Gambar 2. Pemisahan nilai pertama menjadi 2 tipe (id_c, id_i)

Perhatikan gambar diatas, terdapat 2 field yaitu id_c (char) dan id_i (integer). id_c, merupakan hasil dari pemotongan nilai sebelum titik pertama atau nilai keseluruhan pada yang tidak bertitik. id_i, sama seperti id_c hanya saja nilainya dikonversi ke integer. Lalu selanjutnya adalah nilai setelah titik pertama dan titik kedua. Lalu bagaimana prosesnya? Yang kita perlukan adalah posisi titik pertama dan kedua. Untuk mendapatkannya kita pergunakan fungsi LOCATE() :
.

  locate('.',idnomor) as pos1,
  locate('.',idnomor,locate('.',idnomor)+1) as pos2,
  length(idnomor) as fLen
   
.

Perhatikan kode diatas terdapat beberapa field baru lagi yaitu pos1, pos2, dan fLen (singkatan dari fix length, atau panjang yang tetap untuk keperluan selanjutnya). Parameter pertama pada fungsi locate diisi dengan string yang akan dicari. Parameter kedua adalah field atau string utama, sedangkan parameter ketiga adalah posisi yang akan dimulai untuk proses pencarian (dapat diisi atau tidak). Pos1 untuk titik pertama, dan pada pos2 kita mulai pencarian setelah posisi titik pertama (parameter ketiga). Jika tidak ditemukan nilainya akan 0. Setelah posisi titik atau pemisah ini diketahui, selanjutnya menampilkan mengambil nilai kedua dan ketiga dengan fungsi MID(), disertai dengan fungsi IF() agar nilai yang didapat sesuai. Dan pada contoh ini juga menggunakan subquery agar mendapatkan hasil yang diinginkan dengan kode yang lebih rapi. Selain itu subquery juga berguna untuk proses selanjutnya, yaitu penggunaan fungsi MID(). Kode untuk mengambil nilai kedua dan ketiga :
.

SELECT m.*,
  mid(idnomor,if( pos1>0, pos1+1,0),if(pos2>0,pos2-pos1-1,fLen)) as id2_c,
  mid(idnomor,if( pos2>0, pos2+1,fLen+1)) as id3_c
FROM
  (SELECT idnomor, 
  ...

.

Dengan fungsi MID dan field pos1, pos2, dan fLen serta fungsi IF kita memperoleh nilai-nilai kedua dan ketiga. Selanjutnya kita lakukan subquery lagi agar nilai dari id2_c dan id3_c dapat dikonversi menjadi id2_i dan id3_i. Tanpa subquery tetap dapat nilai yang diinginkan hanya saja kita akan memanggil kode untuk mencari nilai id2_c sebanyak dua kali lalu mengkonversi-nya. Jika sudah semua selanjutnya lakukan pengurutan seperti berikut :
.

ORDER BY
  id_i,  id_c,
  id2_i, id2_c,
  id3_i, id3_c

.

Berikut hasil yang akan diperoleh :
Gambar 3. Hasil akhir

Akhir kata, Happy Coding! :D

- krofz

Friday, 6 June 2014

Mengurutkan data pada MySQL


Dalam program database mengurutkan data adalah sesuatu yang wajib. Dalam bahasa SQL , kata kunci yang digunakan adalah "ORDER BY". Contoh :
.

/*queri 1*/
SELECT * FROM mytable m ORDER BY idnomor ASC

/*queri 2*/
SELECT * FROM mytable m ORDER BY idnomor DESC

.
Pada contoh ini data type untuk field idnomor adalah integer. Queri 1 akan mengurutkan secara Ascending (ASC) yaitu dimulai dari yang terkecil. Sedangkan Descending (DESC) kebalikannya ASC dimulai dari yang terbesar. Secara default jika kita tidak menambahkan ASC atau DESC maka pengurutan akan secara ascending. Pada contoh diatas field idnomor bertipe INTEGER yaitu bilangan bulat, lalu bagaimana jika bertipe string (VARCHAR)? Perhatikan contoh berikut :
.

data pada idnomor

id nomor
--------
1
2
3
4
5
6
7
8
9
10

selanjutnya kita urutkan dengan menggunakan queri 1 diatas. Hasilnya akan seperti berikut :

1
10
2
3
4
5
6
7
8
9

.

Gambar 1. Pengurutan pada tipe data string (VARCHAR)

Perhatikan bahwa ID dengan nomor 10 menempati nomor urut kedua setelah angka 1. Ini karena pengurutan berdasarkan string atau karakter dimana 10 lebih dulu dari 2. Program membaca karakter pertama terlebih dahulu lalu dilanjutkan dengan karakter selanjutnya. Untuk itu kita perlu perbaiki queri kita agar didapat hasil yang diinginkan. Dalam hal ini kita perlu mengkonversi string menjadi integer, berikut querinya :
.

SELECT idnomor, CAST(idnomor as signed) as nourut
FROM mytable m order by nourut ASC

.

Gambar 2. Konversi tipe data untuk pengurutan

Fungsi CAST akan mengubah tipe data idnomor sesuai tipe yang diinginkan, dalam hal ini adalah signed integer (signed = bilangan bulat dengan nilai negatif dan positif). Berikut ini tipe yang didukung oleh MySQL :
  • BINARY[(N)]
  • CHAR[(N)]
  • DATE
  • DATETIME
  • DECIMAL[(M[,D])]
  • SIGNED [INTEGER]
  • TIME
  • UNSIGNED [INTEGER]
Sekarang kita ubah sedikit data pada table kita menjadi :
.

1
10
2
2a
2c
22d
6
2h
8
9

hasil yang akan diperoleh dengan queri : 
SELECT idnomor, cast(idnomor as signed) as nourut
FROM mytable m order by nourut ASC

1
2h
2c
2a
2
6
8
9
10
22d

.

Perhatikan bahwa 2h lebih dulu daripada 2c atau 2a. Hal ini terjadi karena saat konversi tipe data dari string ke integer, MySQL mengabaikan karakter selanjutnya jika menemukan karakter selain angka (0-9). Sehingga 2h, 2c, dan 2a dianggap memiliki nomor urut 2, hasil yang ditampilkan mungkin memiliki nomor urut yang berbeda misal 2c dulu atau 2a terlebih dahulu. Untuk memperbaiki queri kita tambahkan urutan order menjadi :
.

SELECT idnomor, cast(idnomor as signed) as nourut
FROM mytable m order by nourut DESC, idnomor ASC

.

Gambar 3. Mengurut 2 field

Kita juga dapat mengurutkan dengan masing-masing ketentuan, contoh urutan field pertama secara ascending lalu yang kedua descending dst. Selanjutnya kita lanjutkan pengurutan untuk data dengan format tertentu, contoh data yang ada :
.

data dalam field idnomor, table myTable :

2.8.3
10
2.24
22d
2.1a
2.10c
2h
2.8
2.8.50
2.8.25

hasil yang diperoleh jika menggunakan queri sebelumnya : 

2.10c
2.1a
2.24
2.8
2.8.25
2.8.3
2.8.50
2h
10
22d

.

Gambar 4. Pengurutan pada format data tertentu


Hal ini terjadi karena setelah konversi string ke angka, pengurutan selanjutnya berdasarkan string. Untuk mengakali-nya kita perlu string setelah titik sebagai urutan selanjutnya. Berikut querinya :
.

SELECT idnomor, cast(idnomor as signed) as nourut,
substring_index(substring_index(idnomor,'.',2),'.',-1) as nourut2
FROM mytable m order by nourut, idnomor, nourut2

.

Substring_index akan mengambil nilai pada parameter pertama (idnomor), lalu mencari karakter/string yang diinginkan pada parameter kedua ('.'), selanjutnya pada parameter ketiga diisi dengan berapa banyak kata yang diinginkan, dalam hal ini 2 kata yaitu sebelum dan sesudah titik. Akhir kata, Happy Coding! :D

- krofz

Tuesday, 22 April 2014

Download Code Blocks v13.12

Logo Code::Blocks v13.12

Code::Blocks versi 13.12 telah hadir sejak Desember 2013 , berikut ini link download dari situs resminya :
  1. Download Page (Binary and Source Code)
  2. Download Binary Only (All System)
  3. Download Binary (Setup) for Windows 2000 / XP / Vista / 7 
  4. Download Binary (Setup) for Linux & Mac
Bagi anda pengguna sistem operasi Windows silahkan download melalui link nomor 3. Untuk fitur standar silahkan download dengan bundling compiler MinGW , yaitu file codeblocks-13.12mingw-setup.exe , ukuran 97.9 MB. Untuk log perubahan yang terjadi pada versi ini dari versi sebelumnya dapat dilihat melalui link berikut Changelog. Untuk para pengguna Linux atau Mac dapat mengklik link nomor 4.

* Catatan : link diatas akan mengarahkan kesitus resmi Code::Blocks, jika terdapat versi terbaru maka di link diatas akan menampilkan versi terbaru tersebut selain v13.12

Jika website resmi CB bermasalah atau anda ingin mendownload versi 13.12 dapat melalui link MediaFire yang telah saya upload (bebas virus :D ). Catatan : file tersebut dikompres dengan format (.7z), anda dapat mengekstrak dengan aplikasi arsip seperti 7zip atau sejenisnya.

- Krofz

Friday, 4 April 2014

Kedalaman dua atau lebih jenis Objek (2)



Yang perlu diperhatikan adalah saat pengambilan koordinat pada sumbu Y, perhatikan gambar berikut :
Gambar. A) urutan bermasalah, B) urutan yang benar.


Dapat dilihat pada gambar diatas bahwa pada huruf A, bola berwarna biru berada didepan bola berwarna hijau. Itu berarti bola hijau ditampilkan lebih dahulu lalu dilanjutkan dengan bola biru. Pada gambar diatas bola biru berada pada koordinat Y = 75 dan bola hijau = 50. Hal ini wajar karena program menampilkan objek dimulai dengan sumbu Y terkecil. Perlu diperhatikan! semakin kebawah nilai sumbu Y semakin bertambah (positif) berbeda dengan Koordinat Kartesius pada Matematika . Karena pada kode kita sebelumnya, pengurutan dimulai dari yang terkecil, sehingga perlu perbaikan agar tampak seperti kondisi B pada gambar diatas. Eitss tenang dulu kita tidak menampilkannya dari yang terbesar dahulu, lalu? lihat solusi berikut.

Solusinya dengan menambahkan tinggi objek tersebut saat pengambilan nilai Y untuk variabel LowY atau Y terendah (penamaannya hanya istilah dengan pandangan semakin kebawah objeknya semakin rendah Y-nya walaupun pada program nilai Y bertambah :P). Sehingga didapat pada contoh diatas koordinat Y bola biru = 120, dan koordinat Y bola hijau = 140. Atau dapat juga menampilkan objek dengan menggunakan koordinat sebenarnya saat pengambilan nilai Y tanpa menambahkan tinggi, tetapi saat menampilkan objek posisi gambar diletakkan pada sumbu Y dikurang tinggi. Akhir kata, happy coding! :D

- krofz
 

back to top

back to top