menggabungkan query menggunakan union di mysql _ khalifavi's weblog
DESCRIPTION
My SqlTRANSCRIPT
-
5/22/2015 MenggabungkanQueryMenggunakanUniondiMySQL|khalifavi'sweblog
https://khalifavi.wordpress.com/2010/09/08/menggunakanuniondimysql/ 1/7
khalifavi'sweblog
BASISDATA
MenggabungkanQueryMenggunakanUniondiMySQL
SEPTEMBER8,2010|KHALIFAVI|11KOMENTAR
Prakata
Mungkinkitapernahmembuatmodeltabelyangrumitsepertiini,tabelyangbisamemilikiatributsamanamunsengajadipisahkan,tapipadaakhirnyakitaharusmenjalankan2queryterpisahuntukmemanggilnya.Sebutsajakitamempunyaitabelbukutamudenganatribut(id,alamat_ip,nama,judul,pesan,tanggal),namunpadamasapenggunaanternyatabanyakyangmengirimkanpesanspamyangtidakkitainginkan,dansolusiyangterpikirpadasaatituadalahmembuattabelspam(denganatributyangsamadengantabel,tapikitamenyortirterlebihdahulu
-
5/22/2015 MenggabungkanQueryMenggunakanUniondiMySQL|khalifavi'sweblog
https://khalifavi.wordpress.com/2010/09/08/menggunakanuniondimysql/ 2/7
denganfilterantispamyangkitabuat,ataumungkinmenggunakanAkismet(http://akismet.com/)),denganmaksudagarsispambisaditinggalkansaatbackup,dantabelbukutamudalamkeadaanbebasspam.
Disistempengelolaan(backend),kitabisamelakukanquerymasingmasingterhadapkeduatabeluntukditampilkanterpisah,tapimelihatduahalamanterpisahuntukmaksudyangsama(dalamhalinimembedakanyangmanabukutamudenganspam)bukanlahsolusiyangbagus.
keduatabeldibuatterpisahdenganpengelolaanterpisah
Solusi
-
5/22/2015 MenggabungkanQueryMenggunakanUniondiMySQL|khalifavi'sweblog
https://khalifavi.wordpress.com/2010/09/08/menggunakanuniondimysql/ 3/7
Dalamkasussepertiinibisadilakukantigasolusi;
1. Gabungkankeduatabelsecarafisikmenjadisatudanditambahatribut(,is_spam)sehingganantinyaqueryakandibatasidenganWHEREis_spam=0(dimanakitamemilihhanyabukanspam)
2. GabungkankeduatabeldalamquerymenggunakanUNIONsehinggayangkitalakukanhanyasekaliquerysaja
3. Lakukanduaqueryuntukmengambildatadarikeduatabeldanmenggabungkannyanantidipemrograman.
Tapisesuaijudul,kitaakanmenggunakanpilihannomor2saja.
UNIONBeraksi
Jadi,setelahkitasepakatdenganmemilihsolusinomorduadiatas,makatinggalkitaselesaikandengansihirUNIONsaja.Meskipunsudahdibahassedikit,tapisebelumlebihjauhbiarsayajelaskantambahanmengenaiUNION.Padadasarnya,unionadalahfungsiuntukmenggabungkanduaataulebihquerySELECTdalamsatuhasilkeluaransaja.DengancatatankeduaquerySELECTtersebutharusmemilikijumlahfieldyangsama.Langsungkitacoba,strukturtabelbukutamudanspamyangsayagunakanadalahsebagaiberikut
Begitupuladengantabelspam,tidakadayangdirubahselainnamatabelnya.Untukitu,denganqueryini
keduaSELECTakhirnyaakanbersatudanmenambahkansatufieldis_spamyangbernilai0jika
123456789
CREATETABLEbukutamu(idINTPRIMARYKEYAUTO_INCREMENT,alamat_ipVARCHAR(16),namaVARCHAR(50),judulVARCHAR(50),pesanVARCHAR(250),tanggalTIMESTAMPDEFAULTCURRENT_TIMESTAMPNOTNULL)
1234
(SELECTid,nama,judul,pesan,tanggal,'0'asis_spamFROMbukutamu)UNION(SELECTid,nama,judul,pesan,tanggal,'1'asis_spamFROMspam)ORDERBYtanggalDESC;
-
5/22/2015 MenggabungkanQueryMenggunakanUniondiMySQL|khalifavi'sweblog
https://khalifavi.wordpress.com/2010/09/08/menggunakanuniondimysql/ 4/7
keduaSELECTakhirnyaakanbersatudanmenambahkansatufieldis_spamyangbernilai0jikadatangdaritabelbukutamu,danbernilai1jikadatangdaritabelspam.SifatnormalnyaUNIONadalahselaluDISTINCT,jadijikaditemukanrecordyangsamatidakakanditampilkankeduakalinya.
PengelolaanBukutamudanSpamdisatukan
Kesimpulan
JadiUNIONbergunauntukmenggabungkanbeberapaquerySELECTuntukmenghasilkansatukeluaransaja.Batasan/aturanyangdapatkitasimpulkandiantaranya
Queryyangdisatukanharusmenghasilkanjumlahfieldyangsama.NilairecordyangsamadalamUNIONakandisatukan,dantidakakantampilduakali(samaketikakitamenggunakanDISTINCT)StatementORDERmenggunakanaliaspadasetiapSELECT,bukannamafieldsebenarnya.StatementORDER(tanpaLIMITpadasalahsatuSELECT)harusdisimpandiakhir,karenajikadisimpandidalamsalahsatuSELECTtidakakanberpengaruh.JikamenggunakanstatementLIMIT(danatauORDER),harusditentukandidalamsalahsatuSELECTatauLIMITtotal.
Untukbatasanstandarpenggunaansayarasainicukupmemenuhi,namunjikaandamerasainimasihkurang,sayapastikaninformasilebihlengkapterdapatdiMySQLManual:UnionSyntax(http://dev.mysql.com/doc/refman/5.0/en/union.html).
-
5/22/2015 MenggabungkanQueryMenggunakanUniondiMySQL|khalifavi'sweblog
https://khalifavi.wordpress.com/2010/09/08/menggunakanuniondimysql/ 5/7
KemanaLagiSetelahIni
MySQLManual:UnionSyntax(http://dev.mysql.com/doc/refman/5.0/en/union.html)
11thoughtsonMenggabungkanQueryMenggunakanUniondiMySQL
1. Bramberkata:OKTOBER28,2011PADA5:46PMkerenkang,iniyangsayabutuhkan
2. masgigiberkata:OKTOBER31,2011PADA7:48AMsayabutuhyangini,thanksya.
3. DodiHidayatullahEMberkata:MARET19,2012PADA1:53PMhaturnuhun
4. anangberkata:JULI25,2012PADA3:13PMkaloyangdigabungkan3tabelgmanakangcaranya
1.khalifaviberkata:
JULI26,2012PADA11:08PMkarenainimenggabungkanquery,bebassajatabelmanadanberapatabelyangakandi`UNION`,tapiyangperludicatatbahwajumlahfieldyangdigabungkanpadasetiapqueryharussama
5. efberkata:MEI15,2013PADA11:17PMbang.sayamonanyasayamasihpemulasih.misaladakasus:adalakilakisukaapeladalakilakisukajeruk
About these ads(http://wordpress.com/about-these-ads/)MYSQL UNION
-
5/22/2015 MenggabungkanQueryMenggunakanUniondiMySQL|khalifavi'sweblog
https://khalifavi.wordpress.com/2010/09/08/menggunakanuniondimysql/ 6/7
adaperempuansukaapeladaperempuansukajeruksemuadalamsatutabel.
nahbang.pertanyaansayaqueryuntukmisalnyaselectlakilakiyangsukaapelajahgimanayahbang.
thanks
1. TegarSetyoberkata:DESEMBER11,2013PADA1:41PMsayacobabantujawabya,mungkinyangandamaksuduntukmenampilkanisirecord?kalomemangbenarbeginisyntaxnya.selectlaki2sukaapelfromnama_tabel;
maafkalosalahjawab,karenasayajugamasihbelajar.hhehee
2.khalifaviberkata:
OKTOBER29,2014PADA4:32PMMas/MbakEf,Kalaudiasumsikanpadatabeltersebutterdapatfield[id,nama,jenis_kelamin,kesukaan]*Siswa
berartiuntuklakilakisukaapeldapatdipanggildenganquerysepertiberikutSELECT*FROMSiswaWHEREjenis_kelamin=lakilakiANDkesukaan=apel
6. mycgbkoejieberkata:OKTOBER4,2013PADA11:06AMmaunanyagan.kalomsalx,adadata001,002,005,006.ygmaudcari003,tapikrn003tdkada,mkadiaakanmenunjuk002ygpalingdktdaridataitu,bgaimanacatanyadlmSQL?thaknxatsbantuannx
1.khalifaviberkata:
OKTOBER29,2014PADA4:37PMKalauinginmenampilkanrecordyangdekat(apabilatidaktersediaidyangdimaksud),bisadenganbantuansubquerysepertiini
SELECT*FROMSiswaWHEREid=(SELECTmax(id)FROMSiswaWHEREid
-
5/22/2015 MenggabungkanQueryMenggunakanUniondiMySQL|khalifavi'sweblog
https://khalifavi.wordpress.com/2010/09/08/menggunakanuniondimysql/ 7/7
Followkhalifavi'sweblog
BuatsitusdenganWordPress.com