gabung banyak jadual dalam satu sahaja
14 replies [Last post]
tengah belajar xml pulak
amin007's picture
User offline. Last seen 10 hours 53 min ago. Offline
Moderator
Joined: 08/16/2009
Points: 445

katakan ada banyak jadual. dalam setiap jadual ada
4 medan yang sama iaitu fid,nama,respon,fe,survey.
survey yang terlibat adalah mm,mdt,pan,bst,qss.

dalam mysql kalau nak gabung jadual kena guna join tapi
dia akan gabung berdasarkan fid yang sama antara 2 jadual.
jadi kalau aku gabung jadual mm dan mdt
sql aku jadi macam ni

select mm.fid,mm.nama,mm.respon,mm.fe,mm.survey,
mdt.fid,mdt.nama,mdt.respon,mdt.fe,mdt.survey
from (mm INNER JOIN mdt
ON mm.fid = mdt.fid)

jadi tu tak memenuhi hasrat aku. aku kalau boleh nak buat macam ni

fe,respon, mm,mdt,bst,pan

kaedah lain, aku import semua jadual dalam satu jadual.
cuma leceh sikit laa banyak kerja dan tak praktikal

jadi ada cara nak nak masukkan data tersebut???

does not have a status.
sy_hadri's picture
User offline. Last seen 4 weeks 3 days ago. Offline
Joined: 08/16/2009
Points: 27

amin, ko nak output dia mcmana? xpaham Big smile
mm,mdt,pan,bst,qss semua tu table ke field?

tengah belajar xml pulak
amin007's picture
User offline. Last seen 10 hours 53 min ago. Offline
Moderator
Joined: 08/16/2009
Points: 445

amin, ko nak output dia mcmana? xpaham Big smile mm,mdt,pan,bst,qss semua tu table ke field?

mm,mdt,pan tu semuanya table

plan aku nak buat join table semuanya
tapi ada masalah dari segi fid

does not have a status.
User offline. Last seen 7 hours 43 sec ago. Offline
Joined: 08/08/2004
Points: 104

guna using
contoh

fom m join x using (ic) join d using (ic)


does not have a status.
User offline. Last seen 7 hours 43 sec ago. Offline
Joined: 08/08/2004
Points: 104

amin ni mysql bukan php.kalau orm consider as php la.

malam-malam boleh la kami masuk sini, siang-siang kerja (kami kerja bengkel kasut) tak pegang pc
jobless's picture
User offline. Last seen 9 hours 11 min ago. Offline
Joined: 12/12/2009
Points: 284

boleh dak hampa bagi dalam bentuk visual atau berstruktur jadual-jadual sedia ada dan jadual yang hampa impikan. jadi senang la sikit kami nak faham input dan outputnya

tengah belajar xml pulak
amin007's picture
User offline. Last seen 10 hours 53 min ago. Offline
Moderator
Joined: 08/16/2009
Points: 445

JADUAL MM

fidnamaresponsurvaypegawai
123654KILANG BAJU AMINA1MMabu
234567KILANG AIR BATU SY HADRIA1MMabu
345678KILANG MINYAK PETROL ALIEN3DA1MMabu bakar
456789KILANG ELEKTRONIK JOBLESSA1MMabu bakar

JADUAL MDT

fidnamaresponsurvaypegawai
465321SYARIKAT JUAL BAJU AMINA1MDTabu
765432SYARIKAT PENGEDAR AIR BATU SY HADRIA1MDTabu
876543STATEN MINYAK PESTONAS ALIEN3DB1MDTabu bakar
987654PENGEDAR BARANG ELEKTIK JOBLESSB1MDTabu bakar

JADUAL PAN

fidnamaresponsurvaypegawai
321654SYARIKAT BASIKAL AMINA1PANabu
423567SYARIKAT TERNAK LEMBU SY HADRIA1PANabu
543678SYARIKAT BUAH BETIK ALIEN3DA1PANabu bakar
654789SYARIKAT PEMBEKAL ORANG BERKERJA JOBLESSA1PANabu bakar

JADUAL BST

fidnamaresponsurvaypegawai
123456SYARIKAT JUAL BATU JUBIN AMINA1BSTabu
234765SYARIKAT PEMBEKAL BARANGAN HARDWARE SY HADRIA1BSTabu
345876SYARIKAT PEMBUAT RUMAH DARI BATU BATA DAN KAYU ALIEN3DA1BSTabu bakar
456987KONTRAKTOR HIASAN DALAMAN JOBLESSA1BSTabu bakar

ok ini adalah contoh jadual. dalam sistem aku jadual ini terletak di 4 pangkalan data mm,mdt,pan dan bst.
jadi boss aku kalau boleh nak join semua jadual ni jadi satu jadual sahaja.
masalah satu setiap jadual ada simpan data2 berasingan. yang sama antara 4 jadual tersebut adalah
fid,nama,respon dan pegawai

jadi boss aku nak tahu prestasi kerja setiap orang ikut kes masing-masing
dalam laporan dia nak macam ni

PEGAWAIMMMDTPANBST
ABU2222
ABU BAKAR0222

jadi kat sini boss aku dapat tahu yang pegawai bernama abu bakar masih belum dapat kes
untuk survey mdt. terus dia boleh call handset dia dan tanya kes dia dah selesai ker belum

does not have a status.
User offline. Last seen 7 hours 44 sec ago. Offline
Joined: 08/08/2004
Points: 104

First Union semua table then buat view.Buat sum if based of view tersebut.

Looking forward for meetup 2010
User offline. Last seen 8 hours 14 min ago. Offline
Joined: 08/16/2009
Points: 310

guna je la php.

does not have a status.
User offline. Last seen 7 hours 44 sec ago. Offline
Joined: 08/08/2004
Points: 104

select sum(if(count(pegawai)),xx,x from (select survay,pegawai  from table1 union select survay,pegawai from table 2) as info where 1.


Konsep lebih kurang cam ni la.

malam-malam boleh la kami masuk sini, siang-siang kerja (kami kerja bengkel kasut) tak pegang pc
jobless's picture
User offline. Last seen 9 hours 11 min ago. Offline
Joined: 12/12/2009
Points: 284

aku_tak_tau wrote:
guna je la php.

kalau pakai sql, sebaris saja. tapi, nak menghasilkan sebaris tu... he he he

kami cadangkan buat satu jadual mengandungi senarai nama pegawai

<table border="1">
	<tr>
		<th>Pegawai</th>
		<th>MM</th>
		<th>MDT</th>
		<th>PAN</th>
		<th>BST</th>
	</tr>
	<?php 
	$result = mysql_query("SELECT * FROM pegawai");
	while ($row = mysql_fetch_array($result)) {
		$nama = $row['nama'];
		$mm = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS bil FROM mm WHERE pegawai = '$nama'"));
		$mdt = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS bil FROM mdt WHERE pegawai = '$nama'"));
		$pan = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS bil FROM pan WHERE pegawai = '$nama'"));
		$bst = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS bil FROM bst WHERE pegawai = '$nama'"));
		echo "<tr align=\"center\"><td align=\"left\">$nama</td>";
		echo "<td>{$mm['bil']}</td>";
		echo "<td>{$mdt['bil']}</td>";
		echo "<td>{$pan['bil']}</td>";
		echo "<td>{$bst['bil']}</td></tr>";
	}
	?>
</table>
does not have a status.
sy_hadri's picture
User offline. Last seen 4 weeks 3 days ago. Offline
Joined: 08/16/2009
Points: 27

amin, table2 ko ni ade relation yg sesuai x antara 1 same lain?xkn nama pegawai kot relation dia?
kalau based on nama pegawai, try cmni jadi x? aku x test pn ni, br buat logik je..ko test sndiri la Wink

contoh utk nama pegawai ni kalau unique je la.. Big smile

SELECT a.pegawai,COUNT(a.fid)AS MM,COUNT(b.fid) AS MDT,COUNT(c.fid) AS PAN,COUNT(d.fid) AS BST FROM mm a LEFT JOIN mdt b ON b.pegawai=a.pegawai LEFT JOIN pan c ON c.pegawai=b.pegawai LEFT JOIN bst d ON d.pegawai=c.pegawai GROUP BY a.pegawai;
tengah belajar xml pulak
amin007's picture
User offline. Last seen 10 hours 53 min ago. Offline
Moderator
Joined: 08/16/2009
Points: 445

sy_hadri wrote:
amin, table2 ko ni ade relation yg sesuai x antara 1 same lain?xkn nama pegawai kot relation dia? kalau based on nama pegawai, try cmni jadi x? aku x test pn ni, br buat logik je..ko test sndiri la Wink

contoh utk nama pegawai ni kalau unique je la.. Big smile

SELECT a.pegawai,COUNT(a.fid)AS MM,COUNT(b.fid) AS MDT,COUNT(c.fid) AS PAN,COUNT(d.fid) AS BST FROM mm a LEFT JOIN mdt b ON b.pegawai=a.pegawai LEFT JOIN pan c ON c.pegawai=b.pegawai LEFT JOIN bst d ON d.pegawai=c.pegawai GROUP BY a.pegawai;

tak yer juga, join ikut nama pegawai, tak sangka ko ini seorang yang bijak sy_hadri.
cuma tak semua pegawai pegang semua kes. tapi tak apa, aku cuba join kejap

does not have a status.
sy_hadri's picture
User offline. Last seen 4 weeks 3 days ago. Offline
Joined: 08/16/2009
Points: 27

bijak ke kurang bijak ke xbijak ke semua tu kurniaanNya..jgn lupa Smile
haa,kalau xsemua pegawai ko cuba la join biase tanpa left join, dpt la pegawai yg ade kes je..
xpun ko dptkn dlu senarai pegawai yg ade kes..teori je,xpasti jd x..hehe

frostbug.com
User offline. Last seen 5 days 8 hours ago. Offline
Joined: 08/16/2009
Points: 30

boleh try ni. tak tau la performance camana

1. create view
CREATE VIEW combine_table AS
SELECT * FROM bst
UNION
SELECT * FROM mdt
UNION
SELECT * FROM mm
UNION
SELECT * FROM pan

2. run sql
select `pegawai` ,
(select count(nama) from mm where pegawai = combine_table.pegawai) as mm ,
(select count(nama) from mdt where pegawai = combine_table.pegawai) as mdt ,
(select count(nama) from pan where pegawai = combine_table.pegawai) as pan ,
(select count(nama) from bst where pegawai = combine_table.pegawai) as bst
from combine_table group by ( `pegawai`)

atau

select `pegawai` ,
sum(case when survey = 'mm' THEN 1 ELSE 0 END) as mm,
sum(case when survey = 'mdt' THEN 1 ELSE 0 END) as mdt,
sum(case when survey = 'pan' THEN 1 ELSE 0 END) as pan,
sum(case when survey = 'bst' THEN 1 ELSE 0 END) as bst
from combine_table group by ( `pegawai`)

3. kalau malas buat view
select `pegawai` ,
sum(case when survey = 'mm' THEN 1 ELSE 0 END) as mm,
sum(case when survey = 'mdt' THEN 1 ELSE 0 END) as mdt,
sum(case when survey = 'pan' THEN 1 ELSE 0 END) as pan,
sum(case when survey = 'bst' THEN 1 ELSE 0 END) as bst
from (SELECT * FROM bst
UNION
SELECT * FROM mdt
UNION
SELECT * FROM mm
UNION
SELECT * FROM pan) as combine_table group by ( `pegawai`)