progrez.cloud

KAMUFLASE star syndrome ~ ( #1 )

20 Juli 2020

Ok, sebenarnya judulnya clickbait, yang artinya anda telah di tipu untuk menekan artikel ini. Selamat membaca :)


Ketahuilah bahwa query pada database itu luas, tak seluas bahasa pemograman, namun cukup menyebalkan jika di kulik satu persatu.


Ketika sedang membangun API, untuk Camps Schadule (my new apps). Aku tersadar akan pentingnya mengetahui syntaks-syntaks pada database. contohnya saya ingin merealisasikan flow seperti ini :



Pada flow di atas saya cuman memproses 2 table, dan masing-masing memiliki 3 field

+ users_tags
  - id     [primary key]
  - tags
  - users  
    
+ users_tag_popularity
  - id     [primary key]
  - tags
  - popularity

Sampai di sini, kalian jangan dulu skep, atau keluar dari web ini. Karna klimaks dari artikel ini akan sia2.


Lanjut, saya mencari dan meraba-raba, bagai mana saya merealisasikan field seperti di flow chart itu. Dan saya menemukan sebuah jawaban yaitu pengunaan IF, THEN, ELSE. pada query. Seep :)

IF EXISTS(SELECT * FROM users_tag_popularity WHERE tags='IT')
THEN 
UPDATE users_tag_popularity SET popularity=popularity+1 WHERE tags='IT'; 
ELSE 
INSERT INTO users_tag_popularity (tags, popularity) VALUES('IT',1)

*Error

Dalam kasus saya kali ini, 10.3.14-MariaDB-1 - Debian buildd-unstable tidak support dengan aturan query (syntaks) tersebut. Kalau menurut penilaian saya, orang biasa pasti langsung menyerah dan menyalahkan keluarganya, karna telah melahirkan anak bego.


Next, saya membedah kembali kata pencarian, agar relevan dengan versi database. Dan akhirnya saya menemukan ON DUPLICATE KEY UPDATE, sebagai problem solve cerita kali ini.


PENYELESAIAN

Ganti bentuk table menjadi seperti di bawah ini :

+ users_tags
  - tags   [primary key]
  - users  [primary key]
    
+ users_tag_popularity
  - tags   [primary key]
  - popularity

Persiapkan value untuk di gunakan saat query, pada bahasa pemograman anda; di sini saya mengunakan php.

$tags_array = $t->allowChar($_POST['tags']); //array tags

$dx = base64_decode(explode(".", base64_decode($_GET['profile']))[1]); //token

for ($i=0; $i <count($tags_array) ; $i++) { 
    
    # multiple insert
    $tags_popularity []= "('".strtolower($tags_array[$i])."', 1)";
    $tags_user []= "('".strtolower($tags_array[$i])."', ".json_decode($dx)->{'id_user'}.")";
}

Finall insert syntaks, by using a query

$query_tags = $db->prepare(
  "INSERT INTO users_tag_popularity (tags, popularity) VALUES "
  .implode(",", $tags_popularity)." ON DUPLICATE KEY UPDATE popularity=popularity+1; 
  INSERT INTO users_tag (tags, users) VALUE ".implode(",", $tags_user).
  " ON DUPLICATE KEY UPDATE tags=VALUES(tags)"
);

$query_tags->execute(); //php execute code


Terima kasih, telah membaca artikel ini. Siapapun kalian, jangan pernah bosan untuk mencintaiku.


BENTUKAN