Rabu, 07 Januari 2009

Menjalankan query select dalam select di Mysql

Menjalankan query select dalam select di Mysql


Menjalankan query select dalam select akan perlu dilakukan ketika kita ingin mengambil informasi database biar hasilnya lebih cepat. Cara konvensional yang sering dipakai adalah melakukan query 2 kali sehingga pemrosesannya akan lebih lama.
Nah sebagai contoh sederhananya, kita akan membuat tabel didatabase yaitu tabel propinsi, yang berisi nama propinsi dan jumlah penduduk.


CREATE TABLE `propinsi` (
`nama_propinsi` varchar(100) collate latin1_general_ci NOT NULL,
`jumlah_penduduk` int(20) unsigned NOT NULL,
PRIMARY KEY (`nama_propinsi`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

INSERT INTO `propinsi` VALUES ('Jatim', 100000);
INSERT INTO `propinsi` VALUES ('Jateng', 200000);
INSERT INTO `propinsi` VALUES ('Jabar', 300000);
INSERT INTO `propinsi` VALUES ('DKI Jakarta', 400000);

Setelah tabel terbentuk, kita akan membuat query untuk menampilkan nama propinsi yang jumlah penduduknya lebih besar dari jumlah penduduk propinsi jateng.
Logika umumnya kita cari dulu jumlah penduduk (n) propinsi jateng, kemudian baru kita cari jumlah penduduk yang lebih besar dari n tadi. terjadi 2 query kan..

Dalam kasus ini, kita akan menggunakan query select dalam select :


select nama_propinsi from propinsi where jumlah_penduduk >
(select jumlah_penduduk from propinsi where nama_propinsi='Jateng');

Output dari query tersebut adalah nama propinsi Jabar dan DKI Jakarta, yang artinya propinsi yang jumlah penduduknya lebih besar dari jumlah penduduk propinsi jateng adalah Jabar dan DKI Jakarta.
Nah cukup simple kan.

Semoga informasi ini berguna.
Posted in MySQLComments (1)
Tags: MySQL
Menggunakan type data mysql yang baik, perlukah?
Posted on 25 Agustus 2008

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.

Semoga informasi ini berguna…
Posted in MySQLComments (1)
Tags: MySQL, PHP
Membuat range date Mysql dengan PHP
Posted on 13 Agustus 2008

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 '
';

//Menampilkan tanggal dengan DATE_ADD dan INTERVAL 1 DAY
$tanggal=$tanggalAwal;
echo $tanggal;
echo '
';
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 '
';
}
} 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

Tidak ada komentar:

Posting Komentar