MySQL : Query Cara Mencari Record yang double atau lebih dari satu dalam table

Untuk mencari record yang double atau lebih dari satu di dalam suatu table bisa menggunakan query sebagai berikut :

SELECT ip_address, COUNT( ip_address )
FROM `visitor_log`
GROUP BY ip_address
HAVING COUNT( ip_address ) >1

ip_address adalah contoh kolom yang unique yang ingin kita cari double nya , sedangkan visitor_log adalah contoh table nya.

Referensi :

http://www.w3schools.com/sql/sql_having.asp

 

Asah Otak : Bermain dengan Subquery

Forum PHP indonesia

Forum PHP indonesia

Sore2 setelah shalat Ashar iseng buka facebook nemu ngelihat ada yang tanya di forum php tentang query .

Menarik pertanyaannya, sekilas hasilnya simple , tapi dicoba lumayan juga butuh effort mikir.

Akhirnya saya ajak agus buat iseng2 nyoba mecahin.

“Gus ini ada kasus bagus deh buat latihan asah otak”

saya dan agus pun utak atik…

Sudah hampir setengah jam berlalu….

Dan hasilnya…. sore itu kita berdua belum bisa mecahin kasus ini dengan sempurna, cuma agus yang hampir nemu, dia memang jago logika nya di atas saya.

Akhirnya daripada pusing2 mecahin kasus punya orang lain lebih baik saya nerusin aja ah kerjaan kantor yang lebih penting.

“udah gus buat nanti aja kalau lagi iseng, itu butuh konsentrasi lebih”

“Iya jal, butuh konsentrasi lebih nih”

Eh pagi tadi saya datang ke kantor sudah ada agus dan dia bersorak “Jal aku udah temu”, bener dah tuh orang  lebih pinter dari saya.

Akhirnya penasaran, saya coba lagi utak atik , awalnya saya gambar di kertas hasilnya dan saya uraikan di kertas

“Tampilkan kelas, nama, ipk masing2 kelas yang mempunyai nilai ipk tertingi”

itu memang salah satu cara saya menguraikan suatu kasus, saya tulis di kertas uraiannya.

Dan setelah utak atik utak atik di phpmyadmin…tara……berhasil

Ternyata memang butuh istirahat semalam buat ngademin kepala, kemarin sudah penuh kali dari pagi, mungkin juga karena sebelumnya saya uraikan kemarin main hajar aja langsung query.

Yuk ah langsung ke kasus

Ada dua table

Table pertama : mahasiswa

Table mahasiswa

Table mahasiswa

Table kedua : ipk

Table IPK

Table IPK

Dan permintaan dari user adalah :

“Tampilkan nama mahasiswa yang ipk nya tertinggi di masing-masing kelas”

Ini query saya :

SELECT mahasiswa.nama, result.kelas, result.terbesar FROM mahasiswa
INNER JOIN ipk ON mahasiswa.id = ipk.mahasiswa_id
INNER JOIN
( SELECT kelas, MAX(ipk.ipk) AS terbesar FROM `mahasiswa` INNER JOIN ipk ON mahasiswa.id = ipk.mahasiswa_id GROUP BY kelas) AS result ON mahasiswa.kelas = result.kelas AND ipk.ipk = result.terbesar

Dan ini hasilnya tara…:

Hasil Query

Hasil Query

Ternyata saya cocokkan dengan agus, query saya dengan agus hampir sama karena logika pemecahan kasusnya ternyata sama.

Kesimpulan saya :

  1. Kalau kita mentok mungkin kita butuh istirahat, ngga perlu dipaksain
  2. Dengan menuliskan uraian kasus di kertas akan lebih memudahkan dan mempercepat penyelesaian masalah
  3. Subquery atau Query dalam Query atau bisa juga disebut Query bersarang adalah salah satu hal penting yang perlu dipelajari untuk memecahkan kasus yang sulit.

Thanks to https://www.facebook.com/chietra.chandrasari?fref=nf yang sudah membuat saya teman saya , agus berlatih asah otak.

MySQL – Mencari Record double di suatu table MySQL

Apabila kita ingin mencari di suatu table apakah ada record yang double kita bisa menggunakan syntax seperti ini :

SELECT * FROM table_product GROUP BY kode  HAVING COUNT(kode) > 1

Syntax di atas untuk mencari record yang lebih dari satu dengan kunci pencarian field ‘kode’

phpMyAdmin sering Log Out setelah 1440 seconds

Apabila phpMyAdmin kita sering log out maka :

1. Buka file config.inc.php di folder phpmyadmin
2. Tambahkan kode berikut :

     $cfg['LoginCookieValidity'] = 60 * 60 * 24

24 artinya 24 jam, boleh kita ubah terserah kita
3.  Sesuaikan settingan di php.ini  : session.gc.maxlifetime , nilainya disamakan dengan settingan diatas
4. Restart  Apache atau Web Server kita

Fungsi PHP buat menghitung usia

Tadi bikin fungsi buat menghitung usia , googling dapat lewat MySQL

SELECT FORMAT(DATEDIFF(CURDATE(),  birth_date) / ((365+366)/2) + 0.123456789,1) AS usia FROM table

Dijalankan di PhpMyAdmin hasilnya bisa ketemu, Tapi saya coding di aplikasi malah ngga jalan, sepertinya karena saya pakai Codeigniter yang mungkin perintah SQL di atas tidak support.

Akhirnya bikin lagi fungsi php sendiri :

    function hitung_usia($tgl_lahir)
    {
        $today = date(‘Y-m-d’);
        $now = time();
        list($thn, $bln, $tgl) = explode(‘-‘,$tgl_lahir);
        $time_lahir = mktime(0,0,0,$bln, $tgl, $thn);

        $selisih = $now – $time_lahir;

        $tahun = floor($selisih/(60*60*24*365));
        $bulan = round(($selisih % (60*60*24*365) ) / (60*60*24*30));

        return $tahun.’ tahun ‘.$bulan.’ bulan’;

    }

Alhamdulillah Hasilnya ketemu.

MySQL Update Inner Join

Untuk Update Table di MySQL dengan menggunakan Inner join bisa seperti ini :

UPDATE table_product a INNER JOIN table_category b

ON a.category_id = b.id

SET a.price = ‘50000’

WHERE b.name = ‘baju’

Membuat Backup Database MySQL Otomatis dengan Crontab Ubuntu

Agar database MySQL menjadi aman maka perlu dibackup secara berkala. dan agar efisien cara backup nya maka sebaiknya dilakukan secara otomatis by sistem , kalau manual takut lupa atau tidak sempat kalau lagi repot.

Salah satu backup otomatis adalah dengan menggunakan crontab

Penjelasan Crontab bisa dibaca di wikipedia http://en.wikipedia.org/wiki/Cron

Cron is the time-based job scheduler in Unix-like computer operating systems.

Formatnya :

*    *    *    *    *  command to be executed
┬    ┬    ┬    ┬    ┬
│    │    │    │    │
│    │    │    │    │
│    │    │    │    └───── day of week (0 - 6) (0 or 6 are Sunday to Saturday, or use names)
│    │    │    └────────── month (1 - 12)
│    │    └─────────────── day of month (1 - 31)
│    └──────────────────── hour (0 - 23)
└───────────────────────── min (0 - 59)

Implementasikan di Backup

Buka terminal dan ketikkan :

crontab -e

nanti akan muncul editor , dan kita ketikkan script di bawah ini :

0 23 * * *  /usr/bin/mysqldump -u USER -pPASSWORD  databasename | gzip > /var/www/database_`date +\%Y-\%m-\%d`.sql.gz

keterangan :

0 = dijalankan pada menit ke 0

23 : dijalankan pada pukul 23 malam

* (pertama)  : dijalankan tanggal berapapun

* (kedua) : dijalankan bulan apapun

* (ketiga) : hari apapun

USER : user database , kalau usernya root isikan saja root

PASSWORD : password database, hati2 antara -pPASSWORD tidak ada spasi antara -p dengan PASSWORD

| gzip : agar file nya dikompres menjadi gz , dengan tujuan agar file nya lebih kecil size nya

date +\%Y-\%m-\%d : agar hasilnya tanggal sekarang saat eksekusi
Baca lebih lanjut

MySQL : Update Tanggal di MySQL

Untuk mengupdate tanggal di MySQL bisa menggunakan :

UPDATE employee SET birth_date = DATE_ADD(birth_date, INTERVAL 1 DAY)

Syntax di atas mengupdate table employee kolom birth_date bertambah 1 hari , misal tanggal 2013-03-04 menjadi 2013-03-05

untuk mengurangi 1 hari tinggal diubah menjadi minus

UPDATE employee SET birth_date = DATE_ADD(birth_date, INTERVAL -1 DAY)

maka dari 2013-03-04 menjadi 2013-03-03

Bila tahunnya yang bertambah atau berkurang bisa diganti dengan YEAR

UPDATE employee SET birth_date = DATE_ADD(birth_date, INTERVAL  1 YEAR)

maka hasilnya dari  2013-03-04 menjadi 2014-03-04

Referensi :

http://stackoverflow.com/questions/3865019/update-date-one-year-in-mysql

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_adddate

Cara Cek Versi MySQL

Untuk mengecek versi MySQL gunakan syntax :

SELECT @@version;

atau

SELECT VERSION();

Bisa dijalankan di cmd bisa pula dijalankan di phpMyAdmin

Berikut printscreen di cmd

Cek Versi MySQL

Cek Versi MySQL

kalau mau lebih lengkap bisa  menggunakan :

SHOW VARIABLES LIKE “%version%”;

mysql_variable

Kalau di phpMyadmin , versi MySQL ada di sebelah kanan atas halaman depan :

Versi MySQL ada di kanan atas

Versi MySQL ada di kanan atas

Referensi :

http://www.geeksww.com/tutorials/database_management_systems/mysql/tips_and_tricks/how_to_check_mysql_version_number.php

MySQL Update dengan Inner Join

Di MySQL kita bisa mengupdate table dengan inner join table lain, berikut contoh syntax nya :

UPDATE employee INNER JOIN departement ON employee.departement_id = departement.id
SET employee.status = ‘inactive’
WHERE departement.name = ‘IT’

Syntax di atas dipakai semisal kita ingin merubah status employee menjadi ‘inactive’ yang departement nya adalah ‘IT’

Bisa pula memakai alias agar tidak kepanjangan :

UPDATE employee a INNER JOIN departement b ON a.departement_id = b.id
SET a.status = ‘inactive’
WHERE b.name = ‘IT’

Selanjutnya bisa kita kembangkan sesuai dengan kebutuhan kita.

 

MySQL INSERT INTO SELECT

Apabila kita ingin memindahkan isi suatu table ke table yang lain dan field2 nya sama bisa memakai syntax :

INSERT INTO table_pertama SELECT * FROM table_kedua;

Apabila ingin backup suatu table , bisa memakai syntax :

 CREATE  TABLE  table_mahasiswa_backup(

`id` int( 11  )  NOT  NULL  AUTO_INCREMENT ,
`name` varchar( 200  )  NOT  NULL,
PRIMARY  KEY (  `id`  )  )

ENGINE  =  MyISAM  DEFAULT CHARSET  = latin1;

SET SQL_MODE=’NO_AUTO_VALUE_ON_ZERO’;

INSERT INTO table_mahasiswa_backup SELECT * FROM table_mahasiswa;

Cara Backup Database MySQL di Windows dengan Command prompt

Untuk backup Database MySQL di windows bisa dilakukan dengan command prompt

yaitu :

shell>mysqldump -u [user] -p [password] [database] – r “/path/namafile.sql”

atau

shell>mysqldump -u [user] -p [password] [database] > path/namafile.sql

untuk lebih jelasnya , misal kita punya xampp dan kita taruh di D maka:

dengan asumsi : user = root, password kosong, dan nama database =  absensi

sebelumnya kita buat dulu satu folder backup di D

D:\xampp\mysql\bin>mysqldump -u root -p absensi > D:\backup\absensi.sql

atau

D:\xampp\mysql\bin>mysqldump -u root -p absensi -r “D:\backup\absensi.sql”

maka database absensi akan tersimpan di folder D:\backup dengan nama absensi.sql

bila mau membackup hanya struktur database nya saja :

D:\xampp\mysql\bin>mysqldump -u root -p –no-data absensi > D:\backup\absensi.sql

atau

D:\xampp\mysql\bin>mysqldump -u root -p –no-data absensi -r “D:\backup\absensi.sql”

Bila mau membackup hanya datanya saja tanpa struktur :

D:\xampp\mysql\bin >mysqldump -u root -p –no-create-info absensi > D:\backup\absensi.sql

atau

D:\xampp\mysql\bin >mysqldump -u root -p –no-create-info absensi -r “D:\backup\absensi.sql”

untuk merestore database :

sebelumnya buat dulu database dengan nama misal absensi_new

kemudian ketikkan di bawah ini :

D:\xampp\mysql\bin >mysql -u root -p absensi_new < D:\backup\absensi.sql

jangan lupa ya untuk membackup pakai tanda > sedangkan untuk merestore pakai tanda <

sumber :

http://www.roseindia.net/mysql/mysql_backup_restore.shtml

http://realm3.com/articles/how_to_schedule_regular_mysql_backups_in_windows