รบกวนสอบถามครับ ปกติผมเขียน PHP ดึงข้อมมูลจาก MySQL ถ้าข้อมูลจะอยู่ใน Header/Detail table ผมก็จะใช้ JOIN ใน SQL statement แล้วก็ใช้ PHP loop จาก record set ที่ได้ แต่ทีนี้คนที่ดูแล server บอกว่าไม่ควรใช้ JOIN แต่ให้ใช้ select แยก table กัน แล้วเปรียบเทียบตัวแปรใน PHP แทนเขาบอกว่าการใช้ JOIN ทำให้ performance ของ server มีปัญหา ถึงจะสร้าง INDEX ก็ไม่แก้ปัญหา
คำถามคือ
1. การใช้ JOIN ทำให้ server มีปัญหาเรื่อง performance ถึงขนาดไม่มีทางแก้เลยหรือครับ?
2. การเขียน PHP แบบ select แยก table แล้วเปรียบเทียบตัวแปร มันเป็นยังไงครับ? ใครพอจะมีตัวอย่างให้ดูไหมครับ? (ผมถามทางคนที่ดูแล server ไปแต่เข้ายังไม่ตอบ ผมอยากรู้เร็วๆ ก็เลยมาถามในนี้ครับ)
อันนี้คือ code ตัวอย่างที่ผมใช้อยู่ ดึงข้อมูลจาก tblOrderDetail มาแสดง
ซึ่ง tblOrderDetail มีประมาณ 50,000 records tblOrderHeader ประมาณ 10.000 tblProducts ประมาณ 500
// Get Records
$Query = "SELECT b.*, c.table_number, e.short_name, e.product_code, e.process_ID, a.order_type, a.guest_name
FROM tblOrderDetail AS b
INNER JOIN tblOrderHeader AS a ON a.order_ID = b.order_ID
INNER JOIN tblProduct AS e ON b.product_ID = e.product_ID
LEFT JOIN tblTable AS c ON a.table_ID = c.table_ID
WHERE b.line_status = '" .ORDER_STATUS_COOKED . "'
ORDER BY c.table_number, b.ordered_time;";
$OrderRS = $DB->selectRowsToArray($Query);
$s = "";
if (count($OrderRS)) {
foreach ($OrderRS as $OrderR) {
$s .= '
<div>'. $OrderR["table_number"] . ' ' . $OrderR["product_code"] . ' ' . $OrderR["short_name"] . ' ' . ($OrderR["quantity"]) . ' ' . $OrderR["line_status"] . '</div>';
}
}
echo $s;
จาก code นี้ ถ้าเขียน select แบบแยก table มันจะเป็นยังไงครับ?
PHP/MySQL join tables
คำถามคือ
1. การใช้ JOIN ทำให้ server มีปัญหาเรื่อง performance ถึงขนาดไม่มีทางแก้เลยหรือครับ?
2. การเขียน PHP แบบ select แยก table แล้วเปรียบเทียบตัวแปร มันเป็นยังไงครับ? ใครพอจะมีตัวอย่างให้ดูไหมครับ? (ผมถามทางคนที่ดูแล server ไปแต่เข้ายังไม่ตอบ ผมอยากรู้เร็วๆ ก็เลยมาถามในนี้ครับ)
อันนี้คือ code ตัวอย่างที่ผมใช้อยู่ ดึงข้อมูลจาก tblOrderDetail มาแสดง
ซึ่ง tblOrderDetail มีประมาณ 50,000 records tblOrderHeader ประมาณ 10.000 tblProducts ประมาณ 500
// Get Records
$Query = "SELECT b.*, c.table_number, e.short_name, e.product_code, e.process_ID, a.order_type, a.guest_name
FROM tblOrderDetail AS b
INNER JOIN tblOrderHeader AS a ON a.order_ID = b.order_ID
INNER JOIN tblProduct AS e ON b.product_ID = e.product_ID
LEFT JOIN tblTable AS c ON a.table_ID = c.table_ID
WHERE b.line_status = '" .ORDER_STATUS_COOKED . "'
ORDER BY c.table_number, b.ordered_time;";
$OrderRS = $DB->selectRowsToArray($Query);
$s = "";
if (count($OrderRS)) {
foreach ($OrderRS as $OrderR) {
$s .= '
<div>'. $OrderR["table_number"] . ' ' . $OrderR["product_code"] . ' ' . $OrderR["short_name"] . ' ' . ($OrderR["quantity"]) . ' ' . $OrderR["line_status"] . '</div>';
}
}
echo $s;
จาก code นี้ ถ้าเขียน select แบบแยก table มันจะเป็นยังไงครับ?