 |
ถามเรื่องการ select ธรรมดา กับ การใช้ LEFT JOIN ได้คำตอบที่ต่างกัน |
|
 |
|
|
 |
 |
|
ตัวอย่างโค้ดน่ะครับ
Code (PHP)
$sql = "SELECT orders_code, orders_by_code, orders_id, orders_status, DATE_FORMAT(orders_create_date,'%Y-%m') AS orders_date FROM tb_orders WHERE orders_status = 1 AND DATE_FORMAT(orders_create_date, '%Y-%m') = '2009-10' ";
ได้จำนวนแถวที่ได้คือ 93 ใบ
กับโค้ดที่ใช้ LEFT JOIN
Code (PHP)
$sql = "SELECT orders_code, orders_by_code, orders_id, orders_status, DATE_FORMAT(orders_create_date,'%Y-%m') AS orders_date FROM tb_orders LEFT JOIN tb_members ON tb_orders.orders_by_code = tb_members.members_code WHERE orders_status = 1 AND DATE_FORMAT(orders_create_date, '%Y-%m') = '2009-10' ";
ได้จำนวนแถวที่ได้คือ 98 ใบ
หมายเหตุ ฟิลด์ orders_by_code ใน tb_orders จะมีค่าเท่ากับ ฟิลด์ members_code ใน tb_members คับ
ผมสงสัยว่าทำไมจึงได้คำตอบไม่เท่ากัน มันเกิดจากสาเหตุอะไรครับ
ต้องแก้ไขยังไงให้ได้ผลลัพธ์ที่เท่ากันครับ
Tag : - - - -
|
|
 |
 |
 |
 |
Date :
2009-10-07 10:24:48 |
By :
petch.it24 |
View :
2144 |
Reply :
4 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จอยกันถูกฟีลป่าวคับ
|
 |
 |
 |
 |
Date :
2009-10-07 10:30:18 |
By :
pjgunner |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถูกครับ
|
 |
 |
 |
 |
Date :
2009-10-07 10:34:55 |
By :
petch.it24 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ได้ผลลัพธ์ที่ไม่เท่ากันโดยส่วนใหญ่ก็จอยกันผิดฟิวด์ตามที่เพ่เอี่ยวบอกอะครับ
|
 |
 |
 |
 |
Date :
2009-10-07 10:36:48 |
By :
NanoThoro |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมพอจะเจออะไรบางอย่างคือ อาจจะผิดพลาดที่ฐานข้อมูลครับ ผมลองไปตรวจสอบที่ tb_members ปรากฏว่า มีรหัสสมาชิกซ้ำกันในระบบ ซึ่งจริงๆแล้วมันต้องไม่ซ้ำกัน
ผมเลย แก้คำสั่ง จากเดิม
Code (PHP)
$sql = "SELECT orders_code, orders_by_code, orders_id, orders_status, DATE_FORMAT(orders_create_date,'%Y-%m') AS orders_date FROM tb_orders LEFT JOIN tb_members ON tb_orders.orders_by_code = tb_members.members_code WHERE orders_status = 1 AND DATE_FORMAT(orders_create_date, '%Y-%m') = '2009-10' ";
เป็น
Code (PHP)
$sql = "SELECT DISTINCT orders_code, orders_by_code, orders_id, orders_status, DATE_FORMAT(orders_create_date,'%Y-%m') AS orders_date FROM tb_orders LEFT JOIN tb_members ON tb_orders.orders_by_code = tb_members.members_code WHERE orders_status = 1 AND DATE_FORMAT(orders_create_date, '%Y-%m') = '2009-10' ";
ก้อเลยได้คำตอบเท่ากันแล้วครับ ขอบคุณน่ะครับ สำหรับคำแนะนำของทุกคนน่ะคับ
|
 |
 |
 |
 |
Date :
2009-10-07 10:53:10 |
By :
petch.it24 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|