สอบถามปัญหาการ JOIN SQL ที่การดึงข้อมูลมันทับซ้อนกันครับ
ขอดูโครงสร้างของทั้ง 2 ตารางหน่อยครับ และฟิลด์ไหนที่ข้อมูลสัมพันธ์กัน
Date :
2013-07-18 09:00:03
By :
arm8957
$sql = "select * from tbl_topic LEFT JOIN tbl_member ON (tbl_topic.create_by = tbl_member.user_id)";
เลขไอดีสมาชิกที่สร้างกระทู้ ในตาราง tbl_topic คอลัมน์ create_by เชื่อมกับ เลขไอดีสมาชิก ในตาราง tbl_member คอลัมน์ user_id แล้วก็ดึงชื่อสมาชิกที่สร้างกระทู้มาแสดง
แต่มันมีอีกคอลัมน์นึงในตาราง tbl_topic คอลัมน์ last_by เป็นเลขไอดีสมาชิกที่ตอบล่าสุดของกระทู้นั้นๆ จะเอาไปเชื่อมกับ user_id ในตาราง tbl_member เพื่อดึงชื่อของผู้ที่ตอบกระทู้ล่าสุดมาแสดงด้วยยังไงครับ?
ประวัติการแก้ไข 2013-07-18 17:01:25
Date :
2013-07-18 17:00:25
By :
Temp
Date :
2013-07-18 20:54:23
By :
A
Code (SQL)
select tp.*, m1.username as createname, m2.username as lastname
from tbl_topic as tp
LEFT JOIN tbl_member as m1 ON tp.create_by = m1.user_id
Left join tbl_member as m2 on tp.last_by=m2.user_id
Date :
2013-07-19 06:09:26
By :
watcharop
Date :
2013-07-19 12:56:59
By :
Temp
ยังเควรี่ไม่ได้เลยครับ
Date :
2013-07-19 17:08:40
By :
Temp
Date :
2013-07-19 22:43:02
By :
Temp
Code (SQL)
SELECT GROUP_CONCAT(last_by SEPARATOR ',') FROM tbl_topic [WHERE .....] GROUP BY last_by
จะได้ไอดีผู้ใช้ต่อกัน 11,202,nnnn,.... จำนวนที่ได้ตามเงื่อนไข WHERE ที่ใช้แสดงรายการทั้งหมด
เมื่อได้มาสมมติว่า 30 รายการก็ประมาณ 30 คน
เอาไปค้นหาชื่อเต็มเก็บไว้ในอาร์เรย์
Code (SQL)
SELECT user_id, fullname FROM tbl_member WHERE user_id IN (ไอดีที่ได้มา)
เก็บไว้ในอาร์เรย์ เช่นอาร์เรย์ของสมาชิกไอดี 11 จะอยู่ในรูปแบบ $allUserFullname[11] = "Mr.Cyberman CR";
ใช้คำสั่งเดิมที่เคยใช้
Code (PHP)
$sql = "select * from tbl_topic LEFT JOIN tbl_member ON (tbl_topic.create_by = tbl_member.user_id)";
ในลูป while ให้เทียบอาร์เรย์ของ last_by
Code (PHP)
$lastPostBy = isset($allUserFullname[$show_topic['last_by']]) ? $allUserFullname[$show_topic['last_by']] : $show_topic['last_by'];
ดูตัวอย่างเพิ่มเติมได้ที่
https://www.thaicreate.com/community/php-array-report.html
Date :
2013-07-19 23:10:18
By :
{Cyberman}
Load balance : Server 05