ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programming join table แล้วระบุฟิวล์ IDของ table1 ไม่ได้กลายเป็น IDของ table2 ที่มาjoinค่ะ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: join table แล้วระบุฟิวล์ IDของ table1 ไม่ได้กลายเป็น IDของ table2 ที่มาjoinค่ะ  (อ่าน 2232 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
ioff
ก๊วนเสียว
*

พลังน้ำใจ: 5
ออฟไลน์ ออฟไลน์

กระทู้: 275



ดูรายละเอียด เว็บไซต์
« เมื่อ: 30 เมษายน 2009, 12:46:53 »

คือ เขียน sql ไว้ว่า
"select * from table1 inner join table2 on(table1.tid=table2.id) order by table1.id desc limit 0,5"
จากนั้นก็ทำการ query  แล้วก็ fetch array  $re=mysql_fetch_array($query);

แล้วทีนี้ปัญหาก็เกิด เมื่อ ต้องการระบุ ค่า ID ของตารางที่1 โดยตัวแปรarray ที่ได้ว่า $re[id] แต่กลับให้ค่าID ของตารางที่2 มาแทน
 (ซึ่งตารางทั้ง1และ2 จะมีฟิวล์ ID  ทั้งสองตาราง )

เลยลองแก้ไขเป็น $re[table1.id] ก็กลายเป็นค่าว่าง  ..กรณีนี้ต้องทำยังไงดีค่ะ    ถึงจะสามารถเรียก ID ของตาราง1 ที่ join มาได้
จำได้ว่า เคยเรียกใช้แบบนี้แล้วได้นะ  แต่ทำไมคราวนี้ไม่ได้ก็ไม่รู้    เลยมึนค่ะ ตอนนี้   ...รบกวนช่วยแนะนำ ชี้แนะด้วยนะค่ะ   Kiss

« แก้ไขครั้งสุดท้าย: 30 เมษายน 2009, 13:15:03 โดย ioff » บันทึกการเข้า

deen05
Newbie
*

พลังน้ำใจ: 2
ออฟไลน์ ออฟไลน์

กระทู้: 72



ดูรายละเอียด
« ตอบ #1 เมื่อ: 30 เมษายน 2009, 13:04:45 »

ก็เขียนถุกแหละนะ
 
table1.tid=table2.id
กำหนด ฟิด ของ table1 ที่จะ join กับ table2.id ผิดอะเปล่า :-\ เพราะเห็นเป็น table1.tid
บันทึกการเข้า
ioff
ก๊วนเสียว
*

พลังน้ำใจ: 5
ออฟไลน์ ออฟไลน์

กระทู้: 275



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 30 เมษายน 2009, 13:12:57 »

ก็เขียนถุกแหละนะ
 
table1.tid=table2.id
กำหนด ฟิด ของ table1 ที่จะ join กับ table2.id ผิดอะเปล่า :-\ เพราะเห็นเป็น table1.tid

ใช่ค่ะคำสั่ง sql อ่ะถูก แต่ อย่างกรณ๊นี้ ทั้งสองตารางมีฟิวล์ ID เหมือนกัน ซึ้งเมื่อไป fetch array แล้วทำการอ้างถึงอ่ะค่ะ มันจะให้ค่า ID ของตารางที่เราไป join ไม่ใช่ตารางหลักที่เรา select

ทำไงต่อดีค่ะ
บันทึกการเข้า

payu
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 125
ออฟไลน์ ออฟไลน์

กระทู้: 1,887



ดูรายละเอียด
« ตอบ #3 เมื่อ: 30 เมษายน 2009, 14:30:14 »


อ้างถึง
select *
from table1 inner join table2 on (table1.tid=table2.id)
order by table1.id desc limit 0,5

เหมือนว่า table1 มีทั้ง id และ tid

1. เลือก field เฉพาะที่จำเป็น ถ้าไม่ต้องใช้ t2.id (ดีกว่า)

select t1.id, t1.name, t2.title
from table1 t1 join table2 t2 on t1.tid=t2.id
order by t1.id desc
limit 0,5

$r['id']

2. ระบุ alias ให้ field

select t1.id as t1id, t1.*, t2.id
from table1 t1 join table2 t2 on t1.tid=t2.id
order by t1.id desc
limit 0,5

$r['t1id']

บันทึกการเข้า

ioff
ก๊วนเสียว
*

พลังน้ำใจ: 5
ออฟไลน์ ออฟไลน์

กระทู้: 275



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 30 เมษายน 2009, 14:37:06 »


อ้างถึง
select *
from table1 inner join table2 on (table1.tid=table2.id)
order by table1.id desc limit 0,5

เหมือนว่า table1 มีทั้ง id และ tid

1. เลือก field เฉพาะที่จำเป็น ถ้าไม่ต้องใช้ t2.id (ดีกว่า)

select t1.id, t1.name, t2.title
from table1 t1 join table2 t2 on t1.tid=t2.id
order by t1.id desc
limit 0,5

$r['id']

2. ระบุ alias ให้ field

select t1.id as t1id, t1.*, t2.id
from table1 t1 join table2 t2 on t1.tid=t2.id
order by t1.id desc
limit 0,5

$r['t1id']




แก้ปัญหาตามวิธีที่ 1 ได้แล้วนะคร๊า...ขอบคุณมากเลย    ได้ ความรู้ เพิ่มขึ้น อีกอย่างแล้วค่ะ ทีนี้  Cry
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์