การ Select ข้อมูลโดยใช้ Join

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา การ Select ข้อมูลโดยใช้ Join

การ Select ข้อมูลโดยใช้ Join

พอดีผมมีข้อมูลอยู่ 2 ตาราง

เช่น ตาราแรก ผู้ใช้งาน มี Table account มีคอลัม Id_user , username ,password คราวนี้ผมต้องการ Join กับอีกตาราง ซึ่งเป็นเหมือนประวัติการเก็บรหัสของ Userได้แก่ Table pass มีคอลัม id, id_user , password , date คราวนี้ ผมลองสมมุติข้อมูลนะครับเช่น

TB account

id_user  |  Username     | number   | 
1        |  hotmail      | 0007     |     
2        |  Gmail        | 0008     |       
3        |  Chaiyo       | 0009     |     

TB pass

id  |  id_user      | password   |  date
1   |  1            | 1234       |  11/06/2012   
2   |  2            | 5678       |  11/06/2012  
3   |  2            | 9999       |  12/06/2012

ตารางหลังจาก Join

id  |  Username     | number   |  password | date
1   |  hotmail      | 0007     |    1234   | 11/06/2012
2   |  Gmail        | 0008     |    9999   | 12/06/2012  
3   |  Chaiyo       | 0009     |    0009   | 17/06/2012
^ หากผมต้องการแสดงทั้งหมด โดย เอาเฉพาะ password record ที่อัพเดทล่าสุด ควรเขียน Join ยังไงหรอครับ ปัญหาที่เจอคือ หลังจาก Group by id_user  having Max(id) หรือ ใช้ order by id desc แล้ว limit 1 หลังจากจอย ผลลัพธ์มันไม่ถูกต้องอย่างที่ต้องการอ้าครับ 


โจทย์ผมลองสมมุติขึ้นมา เพราะตารางจริงๆ มันจอยหลายอัน แต่คิดว่า ถ้าผ่านตรงนี้ ที่เหลือน่าจะจอยปกติได้ รบกวนชี้แนะด้วยครับพี่นิก


Sinbad 01-03-2017 14:02:58

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1

ตารางที่ต้องการนะครับ
id  |  Username     | number   |  password | date
1   |  hotmail      | 0007     |    1234   | 11/06/2012
2   |  Gmail        | 0008     |    9999   | 12/06/2012  
3   |  Chaiyo       | 0009     |    0009   | 17/06/2012

ส่วนผลลัพธ์ที่ผมลอง ใช้ Left join มันมักจะได้ record แรก

id  |  Username     | number   |  password | date
1   |  hotmail      | 0007     |    1234   | 11/06/2012
2   |  Gmail        | 0008     |    5678   | 12/06/2012  
3   |  Chaiyo       | 0009     |    0009   | 17/06/2012

มันไม่เอา password ล่าสุดมาอ้าคับ


sinbad 01-03-2017 14:07
 ความคิดเห็นที่ 2
ลองดูคำสั่งนี้เป็นแนวทาง
 
SELECT 
a.*,
b.*
FROM tbl_a a
LEFT JOIN tbl_b b
ON a.id = b.id
GROUP BY a.id
ORDER BY a.id,
GROUP_CONCAT(DISTINCT b.id) DESC


ninenik 01-03-2017
 ความคิดเห็นที่ 3
ขอบคุณมากคับพี่นิก เดี๋ยวผมลองนะครับ


sinbad 02-03-2017 14:23
1






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ