Mengurutkan Hostname - MYSQL Dasar #45

Dimisalkan Anda memiliki sebuah tabel yang menampung daftar hostname atau domaian dari sebuah website seperti berikut :

MariaDB 
[root93]> CREATE TABLE hostna Query
OK, 0 rows affected (0.28 sec) MariaDB
[root93]> INSERT INTO hostname(nama)VALUES('blog.pangandarancyber.com'),('cvs.php.net'); Query
OK, 2 rows affected (0.06 sec) Records:
2 Duplicates:  0 Warnings:  0 MariaDB

[root93]> INSERT INTO hostname(nama)VALUES('dbi.perl.org'),('bandung.apache.org'); Query
OK, 2 rows affected (0.03 sec) Records:
2 Duplicates:  0 Warnings:  0 MariaDB

[root93]> INSERT INTO hostname(nama)VALUES('admin.mysql.com'),('mariadb.org'); Query
OK, 2 rows affected (0.06 sec) Records:
2 Duplicates:  0 Warn  ings: 0

MariaDB [root93]> INSERT INTO hostname(nama)VALUES('www.google.com');
Query OK, 1 row affected (0.05 sec)

Pada pembelajaran sebelumnya sudah dijelaskan bagaimana pengurutan nerdasarkan panjang substring berubah dimana salah satunya adalah latihan pengurutan dengan perintah SUBSTRING_INDEX dimana kita melakukan pengurutan dengan delimeter '-' sebagai pemisah antar string, lalu dalam latihan in Anda akan belajar mengurutkan nama hostname/domain menjadi 3 bagian dengan menggunakan delimeter '.' sebagai pemisahnya.

Lihat Daftar isi : Pengurutan Hasil Query

Sebelum melakukan pengurutan yang diinginkan, Anda perlu mengetahui bagaimana query yang Anda tulis bekerja, maka Anda perlu memecah data - datanya menjadi beberapa bagian agar lebih dimengerti, sehingga nantinya Anda bisa lebih tahu bagian - bagian mana yang diurutkan

MariaDB [root93]> SELECT nama AS host,
    -> SUBSTRING_INDEX(
    -> SUBSTRING_INDEX(
    -> CONCAT(
    -> '..',nama),'.',-3),'.',1) AS kiri,
    -> SUBSTRING_INDEX(
    -> SUBSTRING_INDEX(
    -> CONCAT('..',nama),'.',-2),'.',1) AS tengah,
    -> SUBSTRING_INDEX(nama,'.',-1) AS kanan
    -> FROM hostname;
+---------------------------+---------+------------------+-------+
| host                      | kiri    | tengah           | kanan |
+---------------------------+---------+------------------+-------+
| blog.pangandarancyber.com | blog    | pangandarancyber | com   |
| cvs.php.net               | cvs     | php              | net   |
| dbi.perl.org              | dbi     | perl             | org   |
| bandung.apache.org        | bandung | apache           | org   |
| admin.mysql.com           | admin   | mysql            | com   |
| mariadb.org               |         | mariadb          | org   |
| www.google.com            | www     | google           | com   |
+---------------------------+---------+------------------+-------+

Perhatikan bahwa penambahan concat dengan dua delimter '..' adalah bahwa supaya nilai yang tidak memiliki awalan www atau subdomain bisa ditampilkan dalam rumpang kosong. Bila dipecah, pecah query diatas mungkin bisa membuat Anda lebih mengerti

Jumlah delimeter '.' disamakan terlebih dahulu , sehingga ditambah dua delimeter '..'

MariaDB [root93]> SELECT nama AS host, CONCAT('..',nama) AS nilai FROM hostname;
+---------------------------+-----------------------------+
| host                      | nilai                       |
+---------------------------+-----------------------------+
| blog.pangandarancyber.com | ..blog.pangandarancyber.com |
| cvs.php.net               | ..cvs.php.net               |
| dbi.perl.org              | ..dbi.perl.org              |
| bandung.apache.org        | ..bandung.apache.org        |
| admin.mysql.com           | ..admin.mysql.com           |
| mariadb.org               | ..mariadb.org               |
| www.google.com            | ..www.google.com            |
+---------------------------+-----------------------------+
7 rows in set (0.00 sec)

Kemudian query mengambil -3 dari substring '.' yang ditemukan sehingga pencarian dimulai dari sisi kanan dan menghasilkan semua nilai yang terdapat pada sisi kanan

MariaDB [root93]> SELECT nama AS host, SUBSTRING_INDEX(CONCAT('..',nama),'.',-3) AS nilai FROM hostname;
+---------------------------+---------------------------+
| host                      | nilai                     |
+---------------------------+---------------------------+
| blog.pangandarancyber.com | blog.pangandarancyber.com |
| cvs.php.net               | cvs.php.net               |
| dbi.perl.org              | dbi.perl.org              |
| bandung.apache.org        | bandung.apache.org        |
| admin.mysql.com           | admin.mysql.com           |
| mariadb.org               | .mariadb.org              |
| www.google.com            | www.google.com            |
+---------------------------+---------------------------+
7 rows in set (0.00 sec)

jika nilainya adalah -2 hasilnya akan seperti berikut

MariaDB [root93]> SELECT nama AS host, SUBSTRING_INDEX(CONCAT('..',nama),'.',-2) AS nilai FROM hostname;
+---------------------------+----------------------+
| host                      | nilai                |
+---------------------------+----------------------+
| blog.pangandarancyber.com | pangandarancyber.com |
| cvs.php.net               | php.net              |
| dbi.perl.org              | perl.org             |
| bandung.apache.org        | apache.org           |
| admin.mysql.com           | mysql.com            |
| mariadb.org               | mariadb.org          |
| www.google.com            | google.com           |
+---------------------------+----------------------+
7 rows in set (0.00 sec)

itu artinya jika nilai substring yang diambil setelahnya adalah 1 maka dia akan menampilkan semua karakter disisi kananya atau jika nilainya -3 maka hasilnya akan menampilkan sisi kiri

Contoh www.google.com, maka nilai '.' (1) yang ditemukan pada sisi kanan akan menampilkan sisi kirinya yaitu www

MariaDB [root93]> SELECT nama AS host, SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT('..',nama),'.',-3),'.',1) AS nilai FROM hostname
+---------------------------+---------+
| host                      | nilai   |
+---------------------------+---------+
| blog.pangandarancyber.com | blog    |
| cvs.php.net               | cvs     |
| dbi.perl.org              | dbi     |
| bandung.apache.org        | bandung |
| admin.mysql.com           | admin   |
| mariadb.org               |         |
| www.google.com            | www     |
+---------------------------+---------+
7 rows in set (0.00 sec)

Dan bisa Anda bukan kembali lagi mengenai paramter SUBSTRING_INDEX, bahwa nilai string yang dicari/ telah ditemukan akan menampilkan semua karakter yang ada pada sisi kiri dan jikan bernilai negatif maka akan menampilkan semua nilai dari sisi kanan dari string yang dicari.

Sehingga dari pecahan - pecahan data yang sudah Anda pelajari diatas dapat menghasilkan pengurutan yang kurang lebih seperti berikut

MariaDB [root93]> SELECT nama AS host,
    -> SUBSTRING_INDEX(
    -> SUBSTRING_INDEX(
    -> CONCAT('..',nama),'.',-3),'.',1) AS kiri,
    -> SUBSTRING_INDEX(
    -> SUBSTRING_INDEX(
    -> CONCAT('..',nama),'.',-2),'.',1) AS tengah,
    -> SUBSTRING_INDEX(nama,'.',-1) AS kanan
    -> FROM hostname
    -> ORDER BY kanan, tengah, kiri;
+---------------------------+---------+------------------+-------+
| host                      | kiri    | tengah           | kanan |
+---------------------------+---------+------------------+-------+
| www.google.com            | www     | google           | com   |
| admin.mysql.com           | admin   | mysql            | com   |
| blog.pangandarancyber.com | blog    | pangandarancyber | com   |
| cvs.php.net               | cvs     | php              | net   |
| bandung.apache.org        | bandung | apache           | org   |
| mariadb.org               |         | mariadb          | org   |
| dbi.perl.org              | dbi     | perl             | org   |
+---------------------------+---------+------------------+-------+
7 rows in set (0.00 sec)

Baca selanjutnya : Mengurutkan Nomor IP - MySQL Dasar #46

0 Response to "Mengurutkan Hostname - MYSQL Dasar #45"

Post a Comment

Komentar yang Anda kirim akan terlebih dahulu di moderasi oleh Admin