จะ join 2 table นี้ยังไงอะครับ ข้อมูลมันถึงจะออกมาตรง.....
ต้องดูก่อนว่าจะ loop ตารางหลักอันไหน
จากนั้นก็ใช้ left join โดยเอา idmember ของตารางหลัก = idmember ของตาราง join
แล้วก็อาจจะต้องมี group by idmember อีกที
Date :
2012-05-14 14:13:15
By :
mr.v
คือ ตอนดึงข้อมูลมาโชว์ ให้ตารางที่ 1 เป็น ตารางหลัก ครับ ตารางที่1 มี 4 records ก็ใช้ โชว์ 4 records ครับ ส่วนตางรางที่ 2 ถ้า มี2 records ก็ให้ดึงมาตามนั้น แต่ต้องเป็นวันที่ ที่ตรงกันครับ ซึ่ง หนึ่งวัน ก็ จะมี ข้อมูลเพิ่ม ขึ้นมา ได้ 2 records ต่อ 1 idmember ทั้ง 2 ตาราง
Date :
2012-05-14 14:19:12
By :
addy_it
มันพอจะเป็นไปได้ไหมครับเนี้ยะ...
Date :
2012-05-14 14:55:19
By :
addy_it
ถ้าทำแบบ NO.4 มันจะได้แบบนี้
Date :
2012-05-14 16:00:01
By :
addy_it
ลองดู
select * from (table1 left join table2 on table1.idmember=table2.idmemberout)
Date :
2012-05-14 16:10:00
By :
บังเอิญผ่านมาเห็น
ต้องการแบบไหน ก็เอารูปมาลงอธิบายด้วยก็ดีนะครับ
มันจะตีความไม่ถูก แล้วมันไม่ตรงตามที่คุณต้องการอีก
Date :
2012-05-14 16:14:44
By :
rootElement@kmutnb
ต้องการ รวม TB แล้ว มี Field อะไรบ้าง
Date :
2012-05-14 16:20:04
By :
kamuro
จากรูป ด้านบน จะเห็นว่า ตารางที่ 1 มีอยู่ 4 records ตาวงที่ 2 มีอยู่ 2 records เวลาที่ให้มันแสดงข้อมูล ก็ให้ตาราง ที่หนึ่งเป็นหลัก คือให้แสดง records ที่ 1-4 ส่วนตารางที่ 2 ก็เอา ฟิลล์ timeout มาใส่ ตารางที่1
แบบรูปนี้ครับ
คือถ้า ตารางที่ 2 timeout เป็นค่าว่าง ก็แสดงออกมาแบบนี้ครับ
Date :
2012-05-14 16:24:59
By :
addy_it
ตารางที่1
ตารางที่2
ให้ออกมาเป็นแบบนี้
Date :
2012-05-14 16:30:12
By :
addy_it
ตาม SQL ที่ให้ไปก็น่าจะทำได้นะครับ
คุณเอา field ไหนมา join กัน ?
มันควรจะเป็น idmember นะครับ เพราะอ้างอิงจาก รหัสสมาชิก ไม่ใช้ idin idout
Date :
2012-05-14 16:35:10
By :
rootElement@kmutnb
ผมก็ใช้ idmember เป็นตัว join แต่ไม่ได้ครับ เพราะ ทั้ง 2 ตาราง จะมี idmember ไม่เท่ากัน มันก้จะออกมาเหมือน โพส No. 5 นั่นแหละครับ
Date :
2012-05-14 16:40:31
By :
addy_it
idmember ต่างกันผมก็ออกมาแบบนั้นสิครับ
คุณ ต้องการรู้ว่าสมาชิกคนไหนเข้าออกตอนไหนรึป่าว หรือต้องการอะไร ?
การ join คือ เอาข้อมูลที่เหมือนกัน ทั้ง 2 table มารวมกัน เพื่อให้ได้ข้อมูลที่มากขึ้น
โดยผ่าน key ที่เหมือนกัน ถ้าไม่มี key ที่เหมือนกัน จะเอาอะไรเป็นตัวชี้หละครับ
จากที่ดูข้อมูลใน 2 ตาราง น่าจะเป็นระบบที่เกี่ยวกับการเข้าออกของสมาชิกใช่ไหมครับ ?
จะใช้ข้อมูล idmember เป็นหลักใช่หรือไม่ ?
หรือใช้ idin idout เป็นหลัก ?
Date :
2012-05-14 16:48:22
By :
rootElement@kmutnb
idmember ต่างกันผมก็ออกมาแบบนั้นสิครับ
คุณ ต้องการรู้ว่าสมาชิกคนไหนเข้าออกตอนไหนรึป่าว...................ใช่
การ join คือ เอาข้อมูลที่เหมือนกัน ทั้ง 2 table มารวมกัน เพื่อให้ได้ข้อมูลที่มากขึ้น
โดยผ่าน key ที่เหมือนกัน ถ้าไม่มี key ที่เหมือนกัน จะเอาอะไรเป็นตัวชี้หละครับ...........................อันนี้ผมเข้าใจ
จากที่ดูข้อมูลใน 2 ตาราง น่าจะเป็นระบบที่เกี่ยวกับการเข้าออกของสมาชิกใช่ไหมครับ ?....................ใช่
จะใช้ข้อมูล idmember เป็นหลักใช่หรือไม่ ?.......................ใช่
หรือใช้ idin idout เป็นหลัก ?.................ใช้เป็นหลักไม่ได้
Date :
2012-05-14 16:53:42
By :
addy_it
ถ้าใช้ idmember เป็นหลัก ทั้ง 2 ตารางก็ต้องมี idmember ที่เหมือนกันครับ ถึง join กันได้
และตอนนี้ผมต้องกลับแล้ว ขอให้ท่านอื่นๆมา่ช่วยด้วยนะครับ
Date :
2012-05-14 16:57:32
By :
rootElement@kmutnb
ลองทำตาม คห.1 ยังครับ
ถ้าจะเอาแบบที่คุณต้องการ คือให้ดึงข้อมูลตารางที่ 1 ออกมาให้หมดก่อนนั้น left join น่าจะดีที่สุดนะ
แล้วก็เอา idmember มาเทียบกัน แล้วก็ต่อด้วย group by ที่ idmember น่ะ
ก็น่าจะเป็นอย่างนี้แหละ
select * from (table1 left join table2 on table1.idmember=table2.idmemberout) group by table1.idmember
Date :
2012-05-14 17:14:48
By :
บังเอิญผ่านมาเห็น
อืม...ต้องการแบบใหนครับ
1 ใน1วัน สมาชิกคนนั้นเข้าออกกี่ครั้งเวลาใหนบ้าง
แบบนี้ก็พอแสดงได้น่ะ แต่มันอาจจะไม่ตรงซ่ะทีเดียว เพราะ ถ้าในการเก็บข้อมูล ถ้าในวันนั้น
เก็บเวลาเข้าไว้ 2 ครั้ง แต่เก็บเวลาออกไว้ครั้งเดียว มันก็จะแสดง เวลาเข้า 2 ครั้ง เวลาออก 2 ครั้งแต่เป็นเวลาเดียวกัน
2 ใน1วัน เข้าออกเวลาใหนคือ เวลาเข้าน้อยสุด และ เวลาออกมากสุด
Date :
2012-05-14 20:15:44
By :
ผ่านมา
1. มันจะใช้ group by ไม่ได้ครับ เพราะในตารางมี idmember เป็น หลายร้อย records มันก็จะรวมกันหมด
2. แล้วในแต่ละวัน 1 idmember มี ได้ไม่เกิน 2 records ทั้ง 2 ตาราง เพราะทำงานเป็น 8 ชั่วโมง ห้ามทำงานเกิน 18 ชั่วโมง
3.เวลาเข้างานของวัน เริ่มตั้งแต่ 00.00-08.30 , 08.30-16.30 ,16.30-00.00 ช่วงเวลาทำงานประมาณนี้ครับ
4.ถ้าทำงาน 2 ช่วงเวลา ต้อง ตอกบัตรเข้า ออก
5. คืออยากดูเวลาเข้าออกของแต่ละคน ในแต่วัน สำหรับคนที่ไม่ตอกบัตรออก ก็ให้เป็นว่างไว้ คือ ตอกเข้าหนึ่งครั้ง ก็ต้องตอกออกหนึ่งครั้ง
Date :
2012-05-15 08:52:45
By :
addy_it
ติดแหงก....
Date :
2012-05-15 15:55:45
By :
addy_it
ถ้า query ครั้งเดียว ก็ประมาณนี้ แต่จะข้ามวันไม่ได้
select a.*,b.timeout
from a left outer join b
on a.idmember=b.idmemberout
and a.date=b.dateout
group by a.idmember,a.date ;
แต่ถ้าออกงานข้ามวัน แนะนำให้เปลี่ยนรูปแบบการเก็บข้อมูล เพื่อง่ายในการ query
หรือ ใช้คำสั่ง [font=Verdana]create temporary table[/font] ช่วยในการ query ซึ่งจะต้อง query [font=Verdana]มากกว่า 1 ครั้ง[/font]
Date :
2012-05-15 16:47:48
By :
tannabor
เดี๋ยว พรุ่งนี้ ผมถึงจะลอง ขอบคุณ ทุกท่านมากครับ
Date :
2012-05-15 16:49:08
By :
addy_it
เห่อๆ....ลองบ้าง
SELECT
tbin.idmember,
tbin.date,
tbin.time,
tbout.dateout,
tbout.timeout
FROM
tbin
left JOIN tbout ON tbin.idmember = tbout.idmemberout AND tbin.date = tbout.dateout and tbout.timeout>tbin.time
group by tbin.date,tbin.time
Date :
2012-05-15 21:50:27
By :
ผ่านมา
นอนไม่หลับแวะมาดู อยากให้ถึงพรุ่งนี้เร็ว ๆ มีอีกไหมครับ ท่าน อื่น แสดงความเห็นหน่อยครับ ช่วยคนที่ไม่รู้ครับ
Date :
2012-05-15 22:20:24
By :
addy_it
Load balance : Server 05