Tampilkan postingan dengan label My SQL. Tampilkan semua postingan
Tampilkan postingan dengan label My SQL. Tampilkan semua postingan

Sabtu, Juli 23

Alternative Distinct dan Group By

Sumur : Distinct Alternative

You want to select distinct values from a column in a table. No problem. You use DISTINCT or GROUP BY in your query. But did you know that there is a third way to suppress duplicates? For example:

Both
select distinct department_id  
from employees
and
select department_id  
from employees
group by department_id
return
DEPARTMENT_ID          
---------------------- 
100                    
30                     

90                     
20                     
70                     
110                    
50                     
80                     
40                     
60                     
10                     

12 rows selected
Boring. Nothing new here.

But wait a minute, here is what I learnt today, another way to return distinct department ids, using the function ROW_NUMBER:
select department_id
from (
  select department_id,
         row_number( ) over 
           (partition by department_id 
            order by department_id) rownumber
    from employees
         ) t
   where rownumber = 1
 returns
DEPARTMENT_ID          
---------------------- 
10                     
20                     
30                     
40                     
50                     
60                     
70                     
80                     
90                     
100                    
110                    


12 rows selected
It’s the same output as the first two queries, except that it is ordered differently.
To be honest, I will continue using DISTINCT or GROUP BY for such requirements, however, it does not hurt to know that there are alternatives.

Kamis, Februari 16

Membuat Laporan Excel dengan PHP


###Database###
CREATE TABLE nilaimhs(
nim varchar(10),
namaMhs varchar(30),
nilai int(11),
PRIMARY KEY(nim)
)

INSERT INTO nilaimhs VALUES
('M0197001', 'Faza Fauzan Kh.', 80),
('M0197002', 'Dwi Amalia Fitriani', 75),
('M0197003', 'Rosihan Ari Yuana', 45),
('M0197004', 'Nada Hasanah', 83),
('M0197005', 'Muh. Ahsani Taqwim', 90);


####Script PHP ####
<?php
// nama file

$namaFile = "report.xls";

// Function penanda awal file (Begin Of File) Excel

function xlsBOF() {
echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
return;
}

// Function penanda akhir file (End Of File) Excel

function xlsEOF() {
echo pack("ss", 0x0A, 0x00);
return;
}

// Function untuk menulis data (angka) ke cell excel

function xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
echo pack("d", $Value);
return;
}

// Function untuk menulis data (text) ke cell excel

function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
echo $Value;
return;
}

// header file excel

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");

// header untuk nama file
header("Content-Disposition: attachment; filename=".$namaFile."");

header("Content-Transfer-Encoding: binary ");

// memanggil function penanda awal file excel
xlsBOF();

// ------ membuat kolom pada excel --- //

// mengisi pada cell A1 (baris ke-0, kolom ke-0)
xlsWriteLabel(0,0,"NO");            

// mengisi pada cell A2 (baris ke-0, kolom ke-1)
xlsWriteLabel(0,1,"NIM");           

// mengisi pada cell A3 (baris ke-0, kolom ke-2)
xlsWriteLabel(0,2,"NAMA MAHASISWA");

// mengisi pada cell A4 (baris ke-0, kolom ke-3)
xlsWriteLabel(0,3,"NILAI");

// mengisi pada cell A5 (baris ke-0, kolom ke-4)
xlsWriteLabel(0,4,"STATUS KELULUSAN");

// -------- menampilkan data --------- //

// koneksi ke mysql

mysql_connect("localhost", "username", "password");
mysql_select_db("database");

// query menampilkan semua data

$query = "SELECT * FROM nilaimhs";
$hasil = mysql_query($query);

// nilai awal untuk baris cell
$noBarisCell = 1;

// nilai awal untuk nomor urut data
$noData = 1;

while ($data = mysql_fetch_array($hasil))
{
// menampilkan no. urut data
xlsWriteNumber($noBarisCell,0,$noData);

// menampilkan data nim
xlsWriteLabel($noBarisCell,1,$data['nim']);

// menampilkan data nama mahasiswa
xlsWriteLabel($noBarisCell,2,$data['namaMhs']);

// menampilkan data nilai
xlsWriteNumber($noBarisCell,3,$data['nilai']);

// menentukan status kelulusan
if ($data['nilai'] >= 60) $status = "LULUS";
else $status = "TIDAK LULUS";

// menampilkan status kelulusan
xlsWriteLabel($noBarisCell,4,$status);

// increment untuk no. baris cell dan no. urut data
$noBarisCell++;
$noData++;
}

// memanggil function penanda akhir file excel
xlsEOF();
exit();

?>

Kamis, Juni 9

Setting Sms Gateway dengan gammu

http://anriz.com/ : Ini saya tunjukkan cara cepat untuk membuat sms gateway dengan gammu untuk Operating System windows. Saya memakai versi gammu jaman bahula yaitu bukan versi .exe tapi berupa file-file. Karena saat saya kerja praktek di Koperasi Telkomsel yaitu Kisel Telkomsel jawa timur. Saya sama temen saya di suruh buat sms gateway dan web menggunakan PHP yang akan digunakan untuk cek client ke server tentang validasi no hp pelanggan. Dan alhamdulillah dalam waktu 1 bulan akhirnya kami berhasil.

Oklah dari pada banyak ngemeng lebih baik to the point. ini step2nya q ambilkan dari blog aswandi, cz males tulis, tapi udh q edit sesuai pengalaman saya :
1. Colokin modem gsm / HP kesalah satu port USB (jika ada paralel port silahakan dipasang di usb atau lewat paralel port cz sama saja), jangan lupa pasang SIM Card dan ditutup dg rapat. Install drivernya dari CD.
2. Cek modem ini masuk ke Port COM berapa dan type koneksinya apa, caranya klik kanan my Computer, klik Hardware, klik Device Wizard. Klik 2 kali Hardware Modem HP, dari situ ntar keliatan di port com berapa, (kasus saya masuk di port: COM10)
3. Ekstrak file gammu_win32.zip ke salah satu folder, misalnya di C:gammu_win32, dalam folder gammu_win32 ada file gammurc, itu adalah file konfigurasi gammu utk konek dengan modem, ubah tulisan di bawah tulisan [gammu] pada baris port dan connection aja, dan untuk tulisan [gammu1] semua baris di bawahnya di tutup aj dengan menggunakan tanda pagar (#), berikut contohnya :
———-start setting file gammurc ————–
port = com1:
#model = 6110
connection = at115200
#synchronizetime = yes
#logfile = gammulog
#logformat = textall
#use_locking = yes
#gammuloc = locfile
#startinfo = yes
#gammucoding = utf8
#rsslevel = teststable
#usephonedb = yes
[gammu1]
#port = com7:
#model = 6110
#connection = fbusblue
#synchronizetime = yes
#logfile = gammulog
#logformat = textall
#use_locking = yes
#gammuloc = locfile
#startinfo = yes
#gammucoding = utf8
———-end setting  file gammurc ————–
4. Skrg coba masuk ke DOS Prompt, masuk ke folder gammu_win32 folder dimana terdapat file gammu.exe
5. coba ketik: gammu –identify, bila gammu telah dapat mengenali modem HP/hardware mu, maka akan muncul detail hardware mu.
6. langkah berikutnya adalah membuat database untuk tempat peyimpanan database sms masuk dan keluar, buka browser anda dan bukalah URL http://localhost/phpmyadmin.  Bila tidak bisa kebuka berarti apache dan mysql anda belum jalan, untuk pemula saya sarankan pake Xampp di windows XP, karena aplikasi ini otomatis menjalankan apache dan mysql saat booting windows.
7. Buat database dengan nama smsd (nama terserah anda), import file SQL di C:/gammu_win32 dg nama file mysql.sql
8. Edit file smsdrc di C:/gammu_win32, yang perlu diubah hanya baris ini aja (sesuaikan dengan settingan database server anda)
# ——– start setting for–smsd MYSQL ——–
user = root
password =
pc = localhost
database = smsd
# ——–  end setting for–smsd MYSQL ——–
9. sekarang jalankan SMS Daemon (server SMS) dengan cara masuk ke dos prompt, C:gammu_win32>gammu –-smsd MYSQL smsdrc
(tanda minus-nya 2 kali), bila sukses maka SMS server telah berjalan.
Setelah itu sms2 yang masuk ke hp langsung masuk ke database.
WARNING : sms2 di inbox akan terhapus, jadi backup dahulu sms2 yg penting
Jadi, proses gammu / smsgateway akn ttp jalan selama daemonnya masih jalan, setiap ada sms yang masuk ke inbox kita, sms itu langsung ‘ditarik’ dan dimasukkan ke database tabel inbox.
Dan kalau mau kirim sms, cukup dengan memasukkan entry ke tabel outbox maka entry tersebut akan ‘diteruskan’ ke hp dan dikirim lah sms. setelah terkirim entry di tabel outbox akan di pindah ke tabel sent-item.
Next, kalau pengen bikin sistem yang auto reply sms, cukup bikin code yang mendeteksi setiap ada inbox yang masuk, terus di baca format textnya, kalau cocok dengan pattern tertentu dan udah di generate reply yang dimaksud, insert data ke tabel outbox. (keyword: crontab, trigger)
Troubleshooting / masalah yang sering terjadi saat setting koneksi sms gateway dengan gammu di windows atau wammu di linux. Klik disini troubleshooting
Berbagi ilmu itu adalah kebaikan yg besar karena bisa membantu sesama … hidup open source …

Rabu, Maret 30

create trigger syntax (sintak pemicu)

CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_body

Pernyataan ini membuat trigger baru. trigger adalah salah satu nama objek database yang berhubungan dengan tabel, dan aktif ketika peristiwa tertentu terjadi pada tabel. Trigger-nya terkait dengan tabel bernama tbl_name, yang harus mengacu pada tabel permanen. Anda tidak dapat mengaitkan trigger dengan tabel TEMPORARY atau tabel view. CREATE TRIGGER ditambahkan di MySQL 5.0.2. Dalam MySQL 5.0 CREATE TRIGGER membutuhkan hak SUPER istimewa . The DEFINER clause menentukan konteks keamanan yang akan digunakan saat memeriksa hak akses pada waktu aktivasi trigger. Ini ditambahkan di MySQL 5.0.17. Lihat nanti dalam bagian ini untuk informasi lebih lanjut. trigger_time adalah waktu pemicu. Hal ini dapat berupa BEFORE atau AFTER untuk menyatakan bahwa trigger aktif sebelum atau setelah setiap baris dimodifikasi. trigger_event menunjukkan jenis pernyataan yang mengaktifkan trigger. trigger_event bisa salah satu dari berikut:
Penting untuk dipahami bahwa trigger_event tidak mewakili tipe literal dari pernyataan SQL yang mengaktifkan begitu banyak trigger seperti jenis operasi tabel. Sebagai contoh, sebuah INSERT trigger diaktifkan tidak hanya dengan INSERT tetapi juga LOAD DATA karena kedua pernyataan memasukkan baris ke dalam tabel. Contoh yang cukup membingungkan dari hal ini adalah INSERT INTO ... ON DUPLICATE KEY UPDATE ... sintaks: BEFORE INSERT trigger akan aktif untuk setiap baris, diikuti dengan AFTER INSERT atau keduanya BEFORE UPDATE dan AFTER UPDATE trigger, tergantung pada apakah ada duplicate key untuk baris. Tidak diperbolehkan ada dua trigger untuk tabel tertentu yang memiliki trigger action time yang sama and trigger event yang sama. Misalnya, Anda tidak dapat memiliki dua BEFORE UPDATE trigger untuk sebuah tabel. Tapi Anda bisa memiliki BEFORE UPDATE dan BEFORE INSERT trigger, atau BEFORE UPDATE dan AFTER UPDATE trigger. trigger_body adalah pernyataan untuk mengeksekusi ketika trigger aktif. Jika Anda ingin mengeksekusi beberapa pernyataan, gunakan BEGIN...END. Hal ini juga memungkinkan Anda untuk menggunakan pernyataan yang sama yang diperbolehkan dalam rutinitas penyimpanan. Lihat Bagian 12.7.1, “BEGIN ... END Compound Statement Syntax”. Beberapa pernyataan yang tidak diijinkan dalam trigger; lihat Bagian E.1, “Restrictions on Stored Routines and Triggers”. Anda bisa merujuk kolom dalam tabel subjek (tabel yang terkait dengan trigger) dengan menggunakan alias OLD dan NEW. OLD.col_name mengacu pada kolom dari sebuah baris yang sudah ada sebelum diperbarui atau dihapus. NEW.col_name mengacu pada kolom dari sebuah baris baru yang akan dimasukkan atau baris yang sudah ada setelah diperbarui. MySQL menyimpan sql_mode pengaturan sistem variabel yang berlaku pada saat trigger dibuat, dan selalu melaksanakan trigger dengan pengaturan yang berlaku, terlepas dari mode SQL Server saat ini. Catatan Saat ini, cascaded foreign key tidak mengaktifkan pemicu. The DEFINER clause menentukan account MySQL yang akan digunakan saat memeriksa hak akses pada saat trigger aktivasi. Jika nilai pengguna diberikan, account MySQL harus ditertentukan sebagai 'user_name'@'host_name' (format yang sama digunakan dalam pernyataan GRANT), CURRENT_USER, atau CURRENT_USER (). Nilai default DEFINER clause adalah pengguna yang mengeksekusi perintah CREATE TRIGGER. Ini sama dengan menetapkan DEFINER = CURRENT_USER secara eksplisit. Jika Anda menggunakan LOCK TABLES untuk mengunci tabel yang memiliki trigger, tabel yang digunakan dalam trigger juga terkunci, seperti yang dijelaskan dalam Bagian 12.3.5.2, “LOCK TABLES and Triggers” Catatan Sebelum MySQL 5.0.10, trigger tidak dapat berisi referensi langsung ke tabel dengan nama. Dimulai dengan MySQL 5.0.10, Anda dapat menulis trigger salah satunya testref seperti ditunjukkan dalam contoh ini:
CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(
a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0
);

delimiter |

CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;
|

delimiter ;

INSERT INTO test3 (a3) VALUES
(NULL), (NULL), (NULL), (NULL), (NULL),
(NULL), (NULL), (NULL), (NULL), (NULL);

INSERT INTO test4 (a4) VALUES
(0), (0), (0), (0), (0), (0), (0), (0), (0), (0);

Misalkan Anda memasukkan nilai berikut ke dalam tabel test1 seperti yang ditunjukkan di sini: mysql> INSERT INTO test1 VALUES
-> (1), (3), (1), (7), (1), (8), (4), (4);
Query OK, 8 rows affected (0.01 sec)
Records: 8  Duplicates: 0  Warnings: 0

Akibatnya, data di empat tabel akan menjadi sebagai berikut:

mysql> SELECT * FROM test1;
+------+
| a1   |
+------+
|    1 |
|    3 |
|    1 |
|    7 |
|    1 |
|    8 |
|    4 |
|    4 |
+------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM test2;
+------+
| a2   |
+------+
|    1 |
|    3 |
|    1 |
|    7 |
|    1 |
|    8 |
|    4 |
|    4 |
+------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM test3;
+----+
| a3 |
+----+
|  2 |
|  5 |
|  6 |
|  9 |
| 10 |
+----+
5 rows in set (0.00 sec)

mysql> SELECT * FROM test4;
+----+------+
| a4 | b4   |
+----+------+
|  1 |    3 |
|  2 |    0 |
|  3 |    1 |
|  4 |    2 |
|  5 |    0 |
|  6 |    0 |
|  7 |    1 |
|  8 |    1 |
|  9 |    0 |
| 10 |    0 |
+----+------+
10 rows in set (0.00 sec)

http://dev.mysql.com/