Tampilkan postingan dengan label MySQL. Tampilkan semua postingan
Tampilkan postingan dengan label MySQL. Tampilkan semua postingan

Konversi MySQL Timestamp ke PHP Date Format

Ketika kita membuat kolom di MySQL dengan tipe kolom timestamp dan meng-set default current_timestamp, maka data yang tersimpan adalah dalam bentuk seperti :
mysql> select fdate from t_feed;
+---------------------+
| fdate               |
+---------------------+
| 2012-03-02 07:14:59 |
| 2012-03-02 07:15:29 |
| 2012-03-02 07:16:29 |
+---------------------+
3 rows in set (0.00 sec)

Dan bentuk tersebut juga lah yang akan muncul ketika kita mengambil dengan PHP. Untuk menampilkan bentuk tanggal di PHP sesuai dengan format yang kita inginkan, PHP sudah menyediakan fungsi strtotime yang bisa mengubah timestamp MySQL menjadi Unix Timestamp.
<php
 $dat = $date_from_mysql_timestamp;
 $fdat = date('g:i d M Y', strtotime($dat));
 echo $fdat; // => 7:15 02 Mar 2012

Reset Auto Increment Pada MySQL dan PostgreSQL

Jika dalam suatu kondisi Anda perlu reset, atau menentukan sendiri nilai auto increment yang ada pada column auto increment database MySQL dan PostgreSQL, makadapat menggunakan cara berikut ini.

Untuk MySQL
mysql> ALTER TABLE t_table AUTO_INCREMENT = x;
x : nilai auto increment selanjutnya.
Jika Anda memiliki data didalam table dan mengeksekusi query diatas dengan memberikan nilai x lebih kecil dari id terakhir di table, maka nilai x akan tetap di set 1 angka setelah angka terakhir id data pada database Anda.

Untuk PostgreSQL
Untuk PostgreSQL memiliki cara sendiri. Anda mungkin perlu tahu dulu nama seq nya sebelum bisa melakukan reset.
Jika Anda menggunakan type data SERIAL untuk id auto increment, maka untuk mendapatkan nama seq nya bisa menggunakan query berikut :
test=# SELECT pg_get_serial_sequence('t_table', 'id');
t_table : adalah nama table
id : adalah column yang diberi type data SERIAL.

Setelah mendapatkan nama seq nya, selanjutnya bisa di reset dengan menggunakan fungsi SETVAL
test=# SELECT SETVAL((SELECT pg_get_serial_sequence('t_table', 'id')), 1, false);
Atau cara yang lebih mudah lagi adalah dengan menggunakan fungsi RESTART IDENTITY jika Anda ingin mereset nilai auto increment berbarengan dengan TRUNCATE
test=# TRUNCATE t_table RESTART IDENTITY CASCADE

Membuat View pada PostgreSQL atau MySQL

Sekarang syuaa akan memberikan contoh kecil cara membuat view pada query PostgreSQL atau MySQL, pada dasarnya kedua database ini memiliki bentuk query yang sama.

View digunakan untuk mempersimple penggunaan query yang panjang jika query yang panjang tersebut akan digunakan berulang-ulang kali. Hal ini tentu akan mempermudah programmer untuk melakukan query yang panjang tersebut dan meminimalisir kesalahan.

Sebagai contoh, saya memiliki table seperti ini :

1. t_murit
mysql> create table t_murit ( mid integer not null auto_increment, mname varchar(150), primary key ( mid ));

mysql> desc t_murit;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| mid   | int(11)      | NO   | PRI | NULL    | auto_increment |
| mname | varchar(150) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
2. t_kelas
mysql> create table t_kelas ( id integer not null auto_increment, mid integer, fval varchar(10), primary key ( id ));

mysql> desc t_kelas;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| mid   | int(11)     | YES  |     | NULL    |                |
| fval  | varchar(10) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3. t_jenis_kelamin
mysql> create table t_jenis_kelamin ( id integer not null auto_increment, mid integer, fval integer, primary key ( id ));

mysql> desc t_jenis_kelamin;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
| mid   | int(11) | YES  |     | NULL    |                |
| fval  | int(11) | YES  |     | NULL    |                |
+-------+---------+------+-----+---------+----------------+
4. t_point
mysql> create table t_nilai ( id integer not null auto_increment, mid integer, fval integer, primary key ( id ));

mysql> desc t_nilai;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
| mid   | int(11) | YES  |     | NULL    |                |
| fval  | int(11) | YES  |     | NULL    |                |
+-------+---------+------+-----+---------+----------------+
Selanjutnya, silahkan eksekusi query berikut untuk menambahkan value pada masing-masing tabel.
insert into t_murit (mname) values ('Syuaa'), ('Gadis'), ('Agus'), ('Indah'), ('Sobari');
insert into t_kelas (mid,fval) values(1,'1.5'), (2,'1.6'), (3,'1.1'), (4,'1.2'), (5,'1.1');
insert into t_jenis_kelamin (mid,fval) values(1,1), (2,2), (3,1), (4,2), (5,1);
insert into t_nilai (mid,fval) values(1,10), (2,9), (3,6), (4,8), (5,9);
Sehingga isi dalam tabel kita nanti jadi seperti ini :
mysql> select * from t_murit;
+-----+--------+
| mid | mname  |
+-----+--------+
|   1 | Syuaa  |
|   2 | Gadis  |
|   3 | Agus   |
|   4 | Indah  |
|   5 | Sobari |
+-----+--------+

mysql> select * from t_kelas;
+----+------+------+
| id | mid  | fval |
+----+------+------+
|  1 |    1 | 1.5  |
|  2 |    2 | 1.6  |
|  3 |    3 | 1.1  |
|  4 |    4 | 1.2  |
|  5 |    5 | 1.1  |
+----+------+------+

mysql> select * from t_jenis_kelamin;
+----+------+------+
| id | mid  | fval |
+----+------+------+
|  1 |    1 |    1 |
|  2 |    2 |    2 |
|  3 |    3 |    1 |
|  4 |    4 |    2 |
|  5 |    5 |    1 |
+----+------+------+

mysql> select * from t_nilai;
+----+------+------+
| id | mid  | fval |
+----+------+------+
|  1 |    1 |   10 |
|  2 |    2 |    9 |
|  3 |    3 |    6 |
|  4 |    4 |    8 |
|  5 |    5 |    9 |
+----+------+------+
Secara umumnya, ketika kita ingin mengambil seluruh siswa beserta datanya, maka setidaknya kita harus mengekseskusi query sepanjang ini :
mysql> select t_murit.mid as mid, t_murit.mname as mname, t_kelas.fval as kelas, t_jenis_kelamin.fval as jenis_kelamin, t_nilai.fval as nilai from t_murit, t_kelas, t_jenis_kelamin, t_nilai where t_murit.mid = t_kelas.mid and t_murit.mid = t_jenis_kelamin.mid and t_murit.mid = t_nilai.mid;
+-----+--------+-------+---------------+-------+
| mid | mname  | kelas | jenis_kelamin | nilai |
+-----+--------+-------+---------------+-------+
|   1 | Syuaa  | 1.5   |             1 |    10 |
|   2 | Gadis  | 1.6   |             2 |     9 |
|   3 | Agus   | 1.1   |             1 |     6 |
|   4 | Indah  | 1.2   |             2 |     8 |
|   5 | Sobari | 1.1   |             1 |     9 |
+-----+--------+-------+---------------+-------+
Dan tentu saja bisa terjadi kesalahan dalam pengetikan jika programmer harus mengetikkan query sepanjang itu setiap kali membutuhkan data siswa.

Untuk mengantisipasi terjadinya kesalahan dalam pengetikan berulang-ulang untuk query tersebut, maka view adalah solusi yang tepat untuk masalah ini.

Sekarang kita akan membuat sebuah view yang mewakili query panjang tersebut. Silahkan eksekusi query berikut :
mysql> create view v_murit as select t_murit.mid as mid, t_murit.mname as mname, t_kelas.fval as kelas, t_jenis_kelamin.fval as jenis_kelamin, t_nilai.fval as nilai from t_murit, t_kelas, t_jenis_kelamin, t_nilai where t_murit.mid = t_kelas.mid and t_murit.mid = t_jenis_kelamin.mid and t_murit.mid = t_nilai.mid;
Dengan bermodalkan view ini, akan cukup mudah untuk melakukan pencarian data siswa keseluruhan atau dengan kriteria tertentu.

Selanjutnya, untuk menampilkan data siswa secara keseluruhan, kita bisa menggunakan query berikut :
mysql> select * from v_murit;
+-----+--------+-------+---------------+-------+
| mid | mname  | kelas | jenis_kelamin | nilai |
+-----+--------+-------+---------------+-------+
|   1 | Syuaa  | 1.5   |             1 |    10 |
|   2 | Gadis  | 1.6   |             2 |     9 |
|   3 | Agus   | 1.1   |             1 |     6 |
|   4 | Indah  | 1.2   |             2 |     8 |
|   5 | Sobari | 1.1   |             1 |     9 |
+-----+--------+-------+---------------+-------+
Untuk menampilkan data siswa dengan id 4, bisa dengan menggunakan query berikut :
mysql> select * from v_murit where mid = 4;
+-----+-------+-------+---------------+-------+
| mid | mname | kelas | jenis_kelamin | nilai |
+-----+-------+-------+---------------+-------+
|   4 | Indah | 1.2   |             2 |     8 |
+-----+-------+-------+---------------+-------+

Membuat Menu Tree PHP jQuery

Kali ini syuaa akan memberikan tutorial membuat Menu Tree dengan PHP dan jQuery.

Sebelum memulai, alahkah baiknya jika kita membuat table yang berisi informasi menu tersebut. Silahkan eksekusi query berikut untuk membuat table t_tree dengan isinya.
create table t_tree ( id integer not null auto_increment, id_parent integer, text varchar ( 50 ), link varchar ( 50 ), primary key ( id ));

insert into t_tree values ( null, 0, 'menu 1', 'index.php#' ),  ( null, 0, 'menu 2', 'index.php#' ),  ( null, 0, 'menu 3', 'index.php#' ),  ( null, 0, 'menu 4', 'index.php#' ),  ( null, 0, 'menu 5', 'index.php#' ),  ( null, 2, 'sub menu 2 1', 'index.php#' ),  ( null, 2, 'sub menu 2 2', 'index.php#' ),  ( null, 2, 'sub menu 2 3', 'index.php#' ),  ( null, 2, 'sub menu 2 4', 'index.php#' ),  ( null, 2, 'sub menu 2 4', 'index.php#' ),  ( null, 6, 'sub menu 2 1 1', 'index.php#' ),  ( null, 6, 'sub menu 2 1 2', 'index.php#' ),  ( null, 6, 'sub menu 2 1 3', 'index.php#' ),  ( null, 11, 'sub menu 2 1 1 1', 'index.php#' ),  ( null, 11, 'sub menu 2 1 1 2', 'index.php#' ),  ( null, 11, 'sub menu 2 1 1 3', 'index.php#' ),  ( null, 11, 'sub menu 2 1 1 4', 'index.php#' ),  ( null, 11, 'sub menu 2 1 1 5', 'index.php#' ),  ( null, 16, 'sub menu 2 1 1 2 1', 'index.php#' ),  ( null, 16, 'sub menu 2 1 1 2 2', 'index.php#' ),  ( null, 16, 'sub menu 2 1 1 2 3', 'index.php#' ),  ( null, 16, 'sub menu 2 1 1 2 4', 'index.php#' ),  ( null, 16, 'sub menu 2 1 1 2 5', 'index.php#' ),  ( null, 3, 'sub menu 3 1', 'index.php#' ),  ( null, 3, 'sub menu 3 2', 'index.php#' ),  ( null, 3, 'sub menu 3 3', 'index.php#' ),  ( null, 3, 'sub menu 3 4', 'index.php#' ),  ( null, 3, 'sub menu 3 5', 'index.php#' ),  ( null, 27, 'sub menu 3 4 1', 'index.php#' ),  ( null, 27, 'sub menu 3 4 2', 'index.php#' ),  ( null, 27, 'sub menu 3 4 3', 'index.php#' ),  ( null, 27, 'sub menu 3 4 4', 'index.php#' );
Dan akan menghasilkan table dengan bentuk kurang lebih seperti ini :
mysql> select * from t_tree;
+----+-----------+--------------------+------------+
| id | id_parent | text               | link       |
+----+-----------+--------------------+------------+
|  1 |         0 | menu 1             | index.php# |
|  2 |         0 | menu 2             | index.php# |
|  3 |         0 | menu 3             | index.php# |
|  4 |         0 | menu 4             | index.php# |
|  5 |         0 | menu 5             | index.php# |
|  6 |         2 | sub menu 2 1       | index.php# |
|  7 |         2 | sub menu 2 2       | index.php# |
|  8 |         2 | sub menu 2 3       | index.php# |
|  9 |         2 | sub menu 2 4       | index.php# |
| 10 |         2 | sub menu 2 4       | index.php# |
| 11 |         6 | sub menu 2 1 1     | index.php# |
| 12 |         6 | sub menu 2 1 2     | index.php# |
| 13 |         6 | sub menu 2 1 3     | index.php# |
| 14 |        11 | sub menu 2 1 1 1   | index.php# |
| 15 |        11 | sub menu 2 1 1 2   | index.php# |
| 16 |        11 | sub menu 2 1 1 3   | index.php# |
| 17 |        11 | sub menu 2 1 1 4   | index.php# |
| 18 |        11 | sub menu 2 1 1 5   | index.php# |
| 19 |        16 | sub menu 2 1 1 2 1 | index.php# |
| 20 |        16 | sub menu 2 1 1 2 2 | index.php# |
| 21 |        16 | sub menu 2 1 1 2 3 | index.php# |
| 22 |        16 | sub menu 2 1 1 2 4 | index.php# |
| 23 |        16 | sub menu 2 1 1 2 5 | index.php# |
| 24 |         3 | sub menu 3 1       | index.php# |
| 25 |         3 | sub menu 3 2       | index.php# |
| 26 |         3 | sub menu 3 3       | index.php# |
| 27 |         3 | sub menu 3 4       | index.php# |
| 28 |         3 | sub menu 3 5       | index.php# |
| 29 |        27 | sub menu 3 4 1     | index.php# |
| 30 |        27 | sub menu 3 4 2     | index.php# |
| 31 |        27 | sub menu 3 4 3     | index.php# |
| 32 |        27 | sub menu 3 4 4     | index.php# |
+----+-----------+--------------------+------------+
32 rows in set (0.01 sec)
Step 1 :
Membuat file tree.php yang berisi skrip untuk kontruksi menu tree
<?php

$cont = mysql_connect("localhost", "root", "");
$sel = mysql_select_db("test");

$qtree = mysql_query("SELECT * FROM `t_tree` ORDER BY `id_parent`, `id` ASC");

while(false !== $tr = mysql_fetch_assoc($qtree))
     if(!empty($tr))
          $tre[] = $tr;

global $tree;
foreach($tre as $v)
     $tree[$v['id']] = $v;
$tx = "";
$tx.= my_parent(0);

function my_parent($id) {
     global $tree;
     $tx = "";
     foreach($tree as $v){
          if($v['id_parent'] == $id){
               $me = $v;
               unset($tree[$v['id']]);
               $child = my_parent($me['id']);

               $class = empty($child) ? "unchild" : "has_child";

               $tx.= "<li class='$class'>";
               $tx.= "<a href='$me[link]' title='$me[text]'>$me[text]</a>";
               $tx.= $child;
               $tx.= "</li>";
          }
     }
     if(!empty($tx)){
          $cl = $id > 0 ? " class='child'" : "";
          return "<ul$cl>$tx</ul>";
     }
     return "";
}
Step 2 : Membuat file index.php yang menampilkan menu tree
<?php require_once('tree.php'); ?>
<html>
<head>
<title>PHP Tree</title>

<style>
body {
     font: 12px "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif;
}
ul {
     list-style-type:none;
     margin:0;
     padding:5px;
}
ul.child {
     display:none;
}
li {
     padding-left:40px;
     background:transparent url(folder-unchild.png) 0 0 no-repeat;
     width:125px;
}
li.has_child {
     background-image: url(sign-close.png);
     background-position: top left;
}
li.open_child {
     background-image:url(sign-open.png);
     background-position: top left;
}

</style>
<script type='text/javascript' src='jq.js'></script>
</head>

<body>
<?php echo $tx; ?>

<script>
     $('li').click(function(event) {
          event.stopPropagation();
          if($(this).children('ul').get(0)) {
               var m = $(this).children('ul').get(0);
               if($(m).css('display') == 'none'){
                    $(this).attr('class', 'open_child');
                    $(m).slideDown('fast');
               }else{
                    $(this).attr('class', 'has_child');
                    $(m).slideUp('fast');
               }
          }
     });
</script>
</body>
</html>

Demo : http://demo.syuaa.net/Menu_Tree_PHP_jQuery/demo.html
Download : http://demo.syuaa.net/Menu_Tree_PHP_jQuery/download/

Mengecheck Keberadaan Table MySQL

Dalam trik query ini, syuaa ingin menjelaskan bagaimana cara untuk mengetahui keberadaan suatu table dalam database mysql.

Hal ini mungkin perlu jika Anda membuat suatu kondisi dimana user bisa membuatkan table tambahan.

Untuk melakukannya cukup dengan menjalankan perintah berikut :

$table_name = "nama_table";
$sql = mysql_query("DESC $table_name");
if(mysql_errno()==1146)
    echo "Table belum ada";
elseif(!mysql_errno())
    echo "Table sudah ada";

Menampilkan Gabungan Table MySQL/PgSQL

Dalam kasus ini, Syuaa akan menunjukan bagaimana menggabungkan tabel yang memiliki relasi atau kesamaan value dan menampilkannya.
Contohnya saya memiliki tabel seperti berikut :

1. tabel [username]
dbsyuaa=# select * from username;
 uid |  uname
-----+---------
   2 | fery
   3 | andi
   4 | budy
   5 | kucing
   6 | gstar
   7 | bing
   8 | bigbang
(7 rows)

2. tabel [usermail]
dbsyuaa=# select * from usermail;
 uid |        umail
-----+---------------------
   2 | fery@yahoo.com
   3 | andi@yahoo.com
   4 | budy@yahoo.com
   5 | kucing@aol.com
   6 | me@gstar.com
   7 | bing@microsoft.com
   8 | bigbang@yahoo.co.id
(7 rows)

3. tabel [usercity]
dbsyuaa=# select * from usercity;
 uid |  ucity
-----+---------
   2 | bandung
   3 | jakarta
   4 | depok
   5 | bali
   6 | jakarta
   7 | Bandung
   8 | Bandung
(7 rows)

Tujuan utama saya adalah mengambil seluruh data dengan ketentuan masing-masing tabel digabung berdasarkan column [uid]. Untuk penyelesaiannya saya menggunakan inner join. Sehingga bentuk query saya akan menjadi seperti ini :
select * from username inner join usermail using("uid") inner join usercity using("uid");

Dan akan menghasilkan tabel seperti ini :
select * from username inner join usermail using("uid") inner join usercity using("uid");
 uid |  uname  |        umail        |  ucity
-----+---------+---------------------+---------
   2 | fery    | fery@yahoo.com      | bandung
   3 | andi    | andi@yahoo.com      | jakarta
   4 | budy    | budy@yahoo.com      | depok
   5 | kucing  | kucing@aol.com      | bali
   6 | gstar   | me@gstar.com        | jakarta
   7 | bing    | bing@microsoft.com  | Bandung
   8 | bigbang | bigbang@yahoo.co.id | Bandung

Dalam kondisi lain, mungkin juga menggunakan bentuk query seperti dibawah :
select * from username, usermail, usercity where username.uid=usercity.uid and username.uid=usermail.uid;

Hanya saja akan menghasilkan tabel yang tidak sesuai dengan keinginan semula :
dbsyuaa=# select * from username, usermail, usercity where username.uid=usercity.uid and username.uid=usermail.uid;
 uid |  uname  | uid |        umail        | uid |  ucity
-----+---------+-----+---------------------+-----+---------
   2 | fery    |   2 | fery@yahoo.com      |   2 | bandung
   3 | andi    |   3 | andi@yahoo.com      |   3 | jakarta
   4 | budy    |   4 | budy@yahoo.com      |   4 | depok
   5 | kucing  |   5 | kucing@aol.com      |   5 | bali
   6 | gstar   |   6 | me@gstar.com        |   6 | jakarta
   7 | bing    |   7 | bing@microsoft.com  |   7 | Bandung
   8 | bigbang |   8 | bigbang@yahoo.co.id |   8 | Bandung
(7 rows)