Thaiadmin

[กรณีศึกษา] รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

Kuke

 :'(  คือทำรายงานเปรียบเทียบยอดซื้อ-ขาย..ซึ่งยอดขายมีขายหน้าร้านและหลังร้าน....ทั้งยอดขายหน้าร้าน-หลังร้านและยอดซื้อต่างอยู่คนละ teble กัน..เมื่อทำแยก dataset กัน ผลลัพก้ออกมาปกติดีแต่เมื่อนำมารวมกันโดยใช้ UNION ALL ปรากฎว่าผลลัพออกมาแค่ยอดขายของหลังร้านอย่างเดียว....แล้วก้อไม่บอก error อะไรเลย รบกวนพี่ๆๆด้วยนะค่ะ :'(
« แก้ไขครั้งสุดท้าย: 7 พฤษภาคม 2007, 15:35:01 โดย VB NeverDie ; ) »

itMiracle

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #1 เมื่อ: 9 มกราคม 2007, 09:22:55 »
ตรวจสอบ Key ที่ใช้ Joine กัน ในกระดาษก่อน แล้ว ลอง เขียน SQL ให้มัน Joine กันทีละ Table ครับ
ค่อย ๆ ขยาย อย่าทำทีเดียวเพราะจะไม่รู้ว่า Error อยุ่ตรงไหน  8)

Kuke

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #2 เมื่อ: 9 มกราคม 2007, 10:54:22 »
ขอบคุณค่ะ..พี่...เด้วจาลองทำใหม่อีกครั้งดู :)

Kuke

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #3 เมื่อ: 10 มกราคม 2007, 08:39:27 »
พี่ๆๆค่ะ..ทราบปัญหที่เกิดขึ้นแล้ว..คือมันเกิดจากข้อมูลเยอะเกินไปมันเลยม่ายออกค่ะ...คิดว่าน่าจะเขียน SQL ใหม่..แต่ยังไม่รู้จะเขียนยังไงให้กระชับกว่านี้..เพราะที่ใช้อยู่ก้อใช้ select ซ้อน select แล้วค่ะ...พี่ๆๆ มีวิธีไหนแนะนำบ้างมั้ยค่ะ...ขอบคุณค่ะ

itMiracle

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #4 เมื่อ: 10 มกราคม 2007, 08:52:06 »
ลองใช้วิธีพักข้อมูลใน Array ของ Application ดูสิครับ หมายถึง Select ขึ้นมาแล้ว ยัดใส่ Array แล้ว เอา Array ไปเข้า For เพื่อ Select อิกที


...แต่.. ผมว่า ลองวิธีโจทย์ดูใหม่อีกทีดีกว่านะครับ บางทีอาจมีวิธีแก้แบบอื่นที่ไม่ต้องใช้ Select ทั้งหมดแบบนั้น

Kuke

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #5 เมื่อ: 10 มกราคม 2007, 09:02:29 »
ขอบคุนค่ะพี่... :)..เด้วจะลองหาวิธีใช้ใน net ดูเพราะเพิ่งมาสานงานต่องของรุ่นพี่ได้อาทิตย์เดียวค่ะ...ยังม่ายค่อยรู้เรื่องเลยค่ะ

itMiracle

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #6 เมื่อ: 10 มกราคม 2007, 09:05:07 »
เด๋ว ๆ ๆ ผมหมายถึงว่า ลองเอาโจทย์มาวิเคราะห์ดูใหม่หน่ะ บางทีอาจจะมีวิธีอื่นในการคิด เช่น ไม่ได้มีความจำเป็นต้อง Select ข้อมูลทั้งหมดแบบนั้น แต่สามารถทำ Form ให้ User เลือก แล้ว แสดงผลทีละส่วนตามที่ User เลือกมา อะไรทำนองนี้หน่ะ

Kuke

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #7 เมื่อ: 10 มกราคม 2007, 09:59:55 »
ค่ะพี่...คือจริงๆแล้วเนี่ยให้ user เรียกโดยกำหนดวันที่x-วันที่x..รหัสจัดซื้อx-รหัสจัดซื้อx....และก้อจากผู้จำหน่าย...แต่มันก้อยังเกิดปัญหาเหมือนเดิมซึ่งตอนนี้เข้าใจว่าอาจจะเป็นเพราะการ join ข้อมูลกันนาค่ะ :-\

itMiracle

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #8 เมื่อ: 10 มกราคม 2007, 10:06:20 »
เอาแบบนี้ดูครับ มองโจทย์ เป็น 3 ส่วน
1. ส่วน Input
2. ส่วน Process
3. ส่วน Output

แล้ว วิเคราะห์โจทย์จากส่วนที่ 3 ก่อน หมายถึง ในส่วนที่ 3. ต้องการให้แสดงผลอะไรบ้างให้เขียนลงกระดาษทก จากนั้นแล้ววิเคราะห์ย้อนกลับว่าถ้าจะได้ให้ Output ตามโจทย์
« แก้ไขครั้งสุดท้าย: 10 มกราคม 2007, 10:16:05 โดย itMiracle »

Kuke

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #9 เมื่อ: 10 มกราคม 2007, 10:12:34 »
 :)เมื่อกี๊..ลองเอายอดขายหลังร้านมา UNION กับ ยอดซื้อปรากฎว่าออกด้วยค่ะพี่...แต่พอใช้เป็น UNION ALL ม่ายออก...สงสัยมันคงตัดฟิลว์ที่ซ้ำกันออกให้แนะเลยค่ะพี่...เด้วจะรายงานมาเรื่อยๆๆนะค่ะ

ออฟไลน์ SamaKitty VB

  • Global Develop Leader
  • *****
  • 2,949
  • 177
  • เพศ: ชาย
  • ไม่ใช่คนเก่ง ไม่ใช่คนดี ไม่ใช่คนพิเศษ ไม่ใช่..!!
    • Thaiadmin.org Power by : VBNeverdie.com
Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่
« ตอบกลับ #10 เมื่อ: 10 มกราคม 2007, 10:25:31 »
รู้สึก กระทู้สาวๆ ถามปัญหานี่ จะคึกคัก กันจังนะ  ;D
ผมมั่งจิ

คำสั่ง Union จะต้องมีลักษณะของ Field จากทั้งสอง Table ที่เท่ากันทุกประการ ครับ
ยกตัวอย่างเช่น


SELECT     UserName, FullName, Password, IsFullSystem, EntryBy, EntryDate, CheckDate, ChangeNo, UserIgnore, 'HIST' AS pSource
FROM         dbo.Userpwdlog
UNION
SELECT     UserName, FullName, Password, IsFullSystem, EntryBy, EntryDate, NULL AS CHECKDATE, 0 AS CHECKNO, USERIGNORE, 'ERP' AS pSource
FROM         dbo.Users


จาก สอง Table นี้ จะมีโครงสร้าง ที่ไม่เท่ากัน แต่เราสามารถ ใช้ Alias แทน เป็นการตั้ง Alias Field ได้ครับ
สังเกตุ จากที่ Hilight ไว้นะครับ

ปล. ..... อันนี้เป็นของ MSSQL นะครับ  ไม่ทราบว่า MySQL ทำแบบนี้หรือเปล่านะ


Hi... Welcome to Thaiadmin.org
Power by VBNeverDie.Com

SMF Mod & Template Modify, Hosting, Chat Room, Joomla Web, Flash Header, Images Decorate

ขออภัย ถ้าไม่ตอบ PM ครับ : กรุณา ถามตอบในบอร์ด

itMiracle

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #11 เมื่อ: 10 มกราคม 2007, 10:30:13 »
สู้ ๆ คับ
ท่าน VB NeverDie ; ) อย่าเพิ่งเอาของ Expert มา ขู่น้องเขาสิท่าน เอาแค่ Normal Join ไปก่อน  >:D

Kuke

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #12 เมื่อ: 10 มกราคม 2007, 10:31:47 »
อื้ม..หืม..พี่ก้อพูดซะน่าเกลียดเชียะ....น้องไทยแอดมินลำบาก..ม่ายให้พี่ไทยแอดมินช่วยแล้วคายจาช่วยละเนี่ย.....กัซทำตามที่พี่บอกแล้วค่ะ.....เด้วจะยกโค๊ดมาให้ดูนะค่ะ

Kuke

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #13 เมื่อ: 10 มกราคม 2007, 10:48:35 »
ยอดซื้อ
SELECT     A.FTUsrCode, B.FTUsrName, C.FTSplCode, C.FTSplName, A.FTPdtCode,   
                      A.FTPdtName,
                      Bud.FCXidQty AS buyQty, Bud.FTXidUnitName AS buyUnitName,
                     Bud.FCXidNet AS buyNet, 0 AS frontQty, 0 AS backQty,
                      0 AS frontQtyAll, 0 AS backQtyAll, 0 AS frontNet, 0 AS backNet, 0 AS sellQty, 0
                     AS sellQtyAll, 0 AS sellNet

FROM        A INNER JOIN
                      Bud INNER JOIN
                      Bud ON Buh.FTBchCode = Bud.FTBchCode ON A.FTPdtCode =
                      Bud.FTPdtCode INNER JOIN
                     C ON A.FTSplCode = C.FTSplCode INNER JOIN
                      B ON A.FTUsrCode = B.FTUsrCode
WHERE     (LEN(A.FTUsrCode) = 2) AND (A.FTUsrCode <> '06 xxxx') AND
                      (Buh.FTXihStaDoc = '1') AND
                      (Buh.FDXihDocDate >= @strDate) AND (Buh.FDXihDocDate <= @endDate)   
                      AND (C.FTSplCode >= @SplCode1) AND
                      (C.FTSplCode <= @SplCode2) AND (A.FTUsrCode LIKE RTRIM(@UsrCode)
                      + '%') AND (A.FTPdtCode LIKE RTRIM(@PdtCode)+ '%')
หลังร้าน
UNION

SELECT     A_1.FTUsrCode, B_1.FTUsrName, C_1.FTSplCode, C_1.FTSplName,
                      A_1.FTPdtCode, A_1.FTPdtName,
                      0 AS buyQty, '-' AS buyUnitName, 0 AS buyNet, 0 AS frontQty, Sed_1.FCXidQty
                      AS backQty, 0 AS frontQtyAll,
                      Sed_1.FCXidQtyAll AS backQtyAll, 0 AS frontNet, Sed_1.FCXidNet AS backNet,
                     0 AS sallQty, 0 AS sallQtyAll, 0 AS sallNet
FROM         A AS A_1 INNER JOIN
                      Seh AS Seh_1 INNER JOIN
                     Sed AS Sed_1 ON Sed_1.FTBchCode = Sed_1.FTBchCode ON 
                    A_1.FTPdtCode = Sed_1.FTPdtCode INNER JOIN
                    C  AS TCNMSpl_1 ON A_1.FTSplCode = C_1.FTSplCode INNER JOIN
                    B AS TSysUser_1 ON A_1.FTUsrCode = B_1.FTUsrCode
WHERE     (LEN(A_1.FTUsrCode) = 2) AND (A_1.FTUsrCode <> '06 xxxx') AND
                     (Sed_1.FTXihStaDoc = '1') AND
                      (Sed_1.FDXihDocDate >= @strDate) AND (Seh_1.FDXihDocDate <=
                    @endDate) AND (C_1.FTSplCode >= @SplCode1) AND
                      (C_1.FTSplCode <= @SplCode2) AND (A_1.FTUsrCode LIKE RTRIM
                      (@UsrCode) + '%') AND
                      (A_1.FTPdtCode LIKE RTRIM(@PdtCode) + '%')



แบบนี้รึป่าวที่พี่หมายถึง...ซึ่งแต่ก่อนใช้แบบ UNION ALL.. ผลลัพธ์จะออกแค่ยอดซื้อ...แต่เมื่อใช้ UNION ผลลัพธ์ออกมาทั้งสองอย่าง..แต่ม่ายรู้ว่าข้อมูลหายไปรึป่าวเพราะยังม่ายได้ตรวจสอบง่าค่ะ

ออฟไลน์ SamaKitty VB

  • Global Develop Leader
  • *****
  • 2,949
  • 177
  • เพศ: ชาย
  • ไม่ใช่คนเก่ง ไม่ใช่คนดี ไม่ใช่คนพิเศษ ไม่ใช่..!!
    • Thaiadmin.org Power by : VBNeverdie.com
Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่
« ตอบกลับ #14 เมื่อ: 10 มกราคม 2007, 11:00:05 »
เท่าที่เห็น ก็จะมีแค่คำผิด ตรง
SellQTY     SallQTY
sellQtyAll   sallNet
sellQtyAll   sallNet

น่ะครับ ลองดูใหม่นะ ผมพยายามแก้ให้ แต่ก็ไม่รู้ว่าถูกป่าว ลองตรวจสอบเงื่อนไขการ Where อีกทีนะ


SELECT     A.FTUsrCode, B.FTUsrName, C.FTSplCode, C.FTSplName, A.FTPdtCode,   
                     A.FTPdtName, Bud.FCXidQty AS buyQty,
                     Bud.FTXidUnitName AS buyUnitName,
                     Bud.FCXidNet AS buyNet, 0 AS frontQty, 0 AS backQty,
                     0 AS frontQtyAll, 0 AS backQtyAll, 0 AS frontNet, 0 AS backNet,
                     0 AS sellQty, 0 AS sellQtyAll, 0 AS sellNet,'ยอดซื้อ' as Flag
FROM        A INNER JOIN
                      Bud INNER JOIN
                      Bud ON Buh.FTBchCode = Bud.FTBchCode ON A.FTPdtCode =
                      Bud.FTPdtCode INNER JOIN
                     C ON A.FTSplCode = C.FTSplCode INNER JOIN
                      B ON A.FTUsrCode = B.FTUsrCode
WHERE     (LEN(A.FTUsrCode) = 2) AND (A.FTUsrCode <> '06 xxxx') AND
                      (Buh.FTXihStaDoc = '1') AND
                      (Buh.FDXihDocDate >= @strDate) AND (Buh.FDXihDocDate <= @endDate)   
                      AND (C.FTSplCode >= @SplCode1) AND
                      (C.FTSplCode <= @SplCode2) AND (A.FTUsrCode LIKE RTRIM(@UsrCode)
                      + '%') AND (A.FTPdtCode LIKE RTRIM(@PdtCode)+ '%')

UNION

SELECT     A_1.FTUsrCode, B_1.FTUsrName, C_1.FTSplCode, C_1.FTSplName, A_1.FTPdtCode,
                     A_1.FTPdtName, 0 AS buyQty,
                     '-' AS buyUnitName, 0 AS buyNet, 0 AS frontQty, Sed_1.FCXidQty AS backQty,
                     0 AS frontQtyAll, Sed_1.FCXidQtyAll AS backQtyAll, 0 AS frontNet, Sed_1.FCXidNet AS backNet,
                     0 AS sellQty, 0 AS sellQtyAll, 0 AS sellNet ,'หลังร้าน' as Flag
FROM         A AS A_1 INNER JOIN
                      Seh AS Seh_1 INNER JOIN
                     Sed AS Sed_1 ON Sed_1.FTBchCode = Sed_1.FTBchCode ON 
                    A_1.FTPdtCode = Sed_1.FTPdtCode INNER JOIN
                    C  AS TCNMSpl_1 ON A_1.FTSplCode = C_1.FTSplCode INNER JOIN
                    B AS TSysUser_1 ON A_1.FTUsrCode = B_1.FTUsrCode
WHERE     (LEN(A_1.FTUsrCode) = 2) AND (A_1.FTUsrCode <> '06 xxxx') AND
                     (Sed_1.FTXihStaDoc = '1') AND
                      (Sed_1.FDXihDocDate >= @strDate) AND (Seh_1.FDXihDocDate <=
                    @endDate) AND (C_1.FTSplCode >= @SplCode1) AND
                      (C_1.FTSplCode <= @SplCode2) AND (A_1.FTUsrCode LIKE RTRIM
                      (@UsrCode) + '%') AND
                      (A_1.FTPdtCode LIKE RTRIM(@PdtCode) + '%')
« แก้ไขครั้งสุดท้าย: 10 มกราคม 2007, 11:12:26 โดย VB NeverDie ; ) »
Hi... Welcome to Thaiadmin.org
Power by VBNeverDie.Com

SMF Mod & Template Modify, Hosting, Chat Room, Joomla Web, Flash Header, Images Decorate

ขออภัย ถ้าไม่ตอบ PM ครับ : กรุณา ถามตอบในบอร์ด

itMiracle

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #15 เมื่อ: 10 มกราคม 2007, 11:04:01 »
ลองเอา SQL อันนี้ไปแยก Query ดูครับ แล้ว สังเกตผลลัพธ์ ธรรมชาติของ UNION นั้นหมายถึง เอาข้อมูลมากองรวมกันหมดอันไหนซ้ำนับแต่ 1

----------------------
post ไม่ทันท่าน VB เหอะๆ ๆ  Error Typing ครับ งานนี้

Kuke

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #16 เมื่อ: 10 มกราคม 2007, 11:18:03 »
 :)ขอบคุนค่ะพี่ทั้งสอง...เด้วขอเวลาทดสอบก่อนนะค่ะ..ได้ผลยังไงแล้วจะมาบอกอีกทีค่ะ O0

Kuke

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #17 เมื่อ: 10 มกราคม 2007, 11:24:20 »
เท่าที่เห็น ก็จะมีแค่คำผิด ตรง
SellQTY     SallQTY
sellQtyAll   sallNet
sellQtyAll   sallNet

น่ะครับ ลองดูใหม่นะ ผมพยายามแก้ให้ แต่ก็ไม่รู้ว่าถูกป่าว ลองตรวจสอบเงื่อนไขการ Where อีกทีนะ


SELECT     A.FTUsrCode, B.FTUsrName, C.FTSplCode, C.FTSplName, A.FTPdtCode,   
                     A.FTPdtName, Bud.FCXidQty AS buyQty,
                     Bud.FTXidUnitName AS buyUnitName,
                     Bud.FCXidNet AS buyNet, 0 AS frontQty, 0 AS backQty,
                     0 AS frontQtyAll, 0 AS backQtyAll, 0 AS frontNet, 0 AS backNet,
                     0 AS sellQty, 0 AS sellQtyAll, 0 AS sellNet,'ยอดซื้อ' as Flag
FROM        A INNER JOIN
                      Bud INNER JOIN
                      Bud ON Buh.FTBchCode = Bud.FTBchCode ON A.FTPdtCode =
                      Bud.FTPdtCode INNER JOIN
                     C ON A.FTSplCode = C.FTSplCode INNER JOIN
                      B ON A.FTUsrCode = B.FTUsrCode
WHERE     (LEN(A.FTUsrCode) = 2) AND (A.FTUsrCode <> '06 xxxx') AND
                      (Buh.FTXihStaDoc = '1') AND
                      (Buh.FDXihDocDate >= @strDate) AND (Buh.FDXihDocDate <= @endDate)   
                      AND (C.FTSplCode >= @SplCode1) AND
                      (C.FTSplCode <= @SplCode2) AND (A.FTUsrCode LIKE RTRIM(@UsrCode)
                      + '%') AND (A.FTPdtCode LIKE RTRIM(@PdtCode)+ '%')

UNION

SELECT     A_1.FTUsrCode, B_1.FTUsrName, C_1.FTSplCode, C_1.FTSplName, A_1.FTPdtCode,
                     A_1.FTPdtName, 0 AS buyQty,
                     '-' AS buyUnitName, 0 AS buyNet, 0 AS frontQty, Sed_1.FCXidQty AS backQty,
                     0 AS frontQtyAll, Sed_1.FCXidQtyAll AS backQtyAll, 0 AS frontNet, Sed_1.FCXidNet AS backNet,
                     0 AS sellQty, 0 AS sellQtyAll, 0 AS sellNet ,'หลังร้าน' as Flag
FROM         A AS A_1 INNER JOIN
                      Seh AS Seh_1 INNER JOIN
                     Sed AS Sed_1 ON Sed_1.FTBchCode = Sed_1.FTBchCode ON 
                    A_1.FTPdtCode = Sed_1.FTPdtCode INNER JOIN
                    C  AS TCNMSpl_1 ON A_1.FTSplCode = C_1.FTSplCode INNER JOIN
                    B AS TSysUser_1 ON A_1.FTUsrCode = B_1.FTUsrCode
WHERE     (LEN(A_1.FTUsrCode) = 2) AND (A_1.FTUsrCode <> '06 xxxx') AND
                     (Sed_1.FTXihStaDoc = '1') AND
                      (Sed_1.FDXihDocDate >= @strDate) AND (Seh_1.FDXihDocDate <=
                    @endDate) AND (C_1.FTSplCode >= @SplCode1) AND
                      (C_1.FTSplCode <= @SplCode2) AND (A_1.FTUsrCode LIKE RTRIM
                      (@UsrCode) + '%') AND
                      (A_1.FTPdtCode LIKE RTRIM(@PdtCode) + '%')




ตรงที่ 'ยอดซื้อ'กะ'หลังร้าน' AS Flag คืออะไรค่ะใช่ค่าของ FCSdtQtyAll ซึ่งคือค่าของ จำนวนสินค้าทั้งหมด(Qty*UnitFactor*StkFactor)รึป่าวค่ะ

ออฟไลน์ SamaKitty VB

  • Global Develop Leader
  • *****
  • 2,949
  • 177
  • เพศ: ชาย
  • ไม่ใช่คนเก่ง ไม่ใช่คนดี ไม่ใช่คนพิเศษ ไม่ใช่..!!
    • Thaiadmin.org Power by : VBNeverdie.com
Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่
« ตอบกลับ #18 เมื่อ: 10 มกราคม 2007, 11:26:51 »
อันนั้น จะไม่ใช้ก็ได้ครับ
แต่ถ้า สั่งให้แสดงตารางออกมา ก็จะเห็นว่า จะมี Field ชื่อ Flag 
แล้วมีคำว่า  ยอดซื้อ    กับ คำว่า หลังร้าน
กำกับ อยู่ในทุกๆ  Record
นั่นหมายความว่า  เราสามารถพิสูจน์ได้ว่า Record ใด มาจาก Table ใดครับผม
ดูจาก รูปที่แนบมาก็ได้ครับ เป็นตัวอย่าง ง่ายๆ
Hi... Welcome to Thaiadmin.org
Power by VBNeverDie.Com

SMF Mod & Template Modify, Hosting, Chat Room, Joomla Web, Flash Header, Images Decorate

ขออภัย ถ้าไม่ตอบ PM ครับ : กรุณา ถามตอบในบอร์ด

itMiracle

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #19 เมื่อ: 10 มกราคม 2007, 11:28:27 »
อันนั้น จะไม่ใช้ก็ได้ครับ
แต่ถ้า สั่งให้แสดงตารางออกมา ก็จะเห็นว่า จะมี Field ชื่อ Flag 
แล้วมีคำว่า  ยอดซื้อ    กับ คำว่า หลังร้าน
กำกับ อยู่ในทุกๆ  Record
นั่นหมายความว่า  เราสามารถพิสูจน์ได้ว่า Record ใด มาจาก Table ใดครับผม


ท่าน  VB NeverDie ; ) เล่นของ Expert อีกแล้ว  ^-^

Kuke

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #20 เมื่อ: 10 มกราคม 2007, 11:49:30 »
อื้ม...หืม....เจ๋งง่ะเพ่ชาย......ท่านเพ่ itMiracle ก้อช่างแซวพี่เค้าจิงๆนะ O0

Kuke

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #21 เมื่อ: 10 มกราคม 2007, 13:33:39 »
 ???..พี่ๆๆค่ะถ้าหากทำตามโค๊ดที่อ้างไว้มีโอกาศที่ข้อมูลบางส่วนจะถูกตัดไปมั้ยค่ะ....ถ้าเราใช้ UNOIN แทน UNOIN ALL

ออฟไลน์ SamaKitty VB

  • Global Develop Leader
  • *****
  • 2,949
  • 177
  • เพศ: ชาย
  • ไม่ใช่คนเก่ง ไม่ใช่คนดี ไม่ใช่คนพิเศษ ไม่ใช่..!!
    • Thaiadmin.org Power by : VBNeverdie.com
Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #22 เมื่อ: 10 มกราคม 2007, 14:08:20 »
???..พี่ๆๆค่ะถ้าหากทำตามโค๊ดที่อ้างไว้มีโอกาศที่ข้อมูลบางส่วนจะถูกตัดไปมั้ยค่ะ....ถ้าเราใช้ UNOIN แทน UNOIN ALL
Union All  จะมองข้อมูลทีละตารางครับ
แต่ Union  จะมองข้อมูลที่ Primary Key ครับ

ดูตัวอย่างผลที่ได้ จากรูป นะครับ
« แก้ไขครั้งสุดท้าย: 11 มกราคม 2007, 14:50:11 โดย VB NeverDie ; ) »
Hi... Welcome to Thaiadmin.org
Power by VBNeverDie.Com

SMF Mod & Template Modify, Hosting, Chat Room, Joomla Web, Flash Header, Images Decorate

ขออภัย ถ้าไม่ตอบ PM ครับ : กรุณา ถามตอบในบอร์ด

Kuke

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #23 เมื่อ: 10 มกราคม 2007, 14:22:50 »
อ้อ...งึมๆๆๆ ;D...ขอบคุณค่า..เข้าใจแระ

ออฟไลน์ insanity

  • *****
  • 1,793
  • 77
  • เพศ: ชาย
  • Life would be much easier if I had the source code
    • http://jullapol.blogspot.com
Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #24 เมื่อ: 10 มกราคม 2007, 21:36:32 »
- UNION ALL operator จะเอา ทุก ๆ rows ที่เป็นผลลัพธ์จาก Query ย่อย มารวมกันเป็นผลลัพธ์สุดท้าย
- UNION operator จะเอา row ที่ซ้ำกันออกในผลลัพธ์สุดท้าย  หรือพูดง่าย ๆ ก็คือ ถ้ามี row ซ้ำกัน มันจะออกมาแค่ row เดียว
  ( ไม่ว่าจะเป็นกรณี row ใน query ชุด 1 มาซ้ำ กับ row ใน query ชุด 2   หรือ row ใน query ชุด 1 ซ้ำกันเอง ก็จะโดนตัดทิ้ง เหลือแค่ row เดียว เช่นกัน   งงมั้ย )

ดังนั้น UNION จึงทำงานช้ากว่า และ ถ้าใช้ UNION จึงมีความเป็นไปได้ที่ข้อมูลที่เรียกมาจะถูกตัดออกไป เนื่องจากมันเป็น row ที่ซ้ำ ซึ่งบางครั้งข้อมูลมันไม่ได้ซ้ำหรอก แต่ว่าเราเขียน SQL ไป Select มาแค่บาง Column ( ไม่ได้เอา Column ที่เป็น unique key มาด้วย) เลยทำให้เกิด row ซ้ำ โดยไม่ตั้งใจ 

เช่น  ตาราง ORER มี (ORDERID, ORDERDATE, CUSTNAME, AMOUNT)  ซึ่ง Key คือ ORDERID สมมติข้อมูลเป็น
O001, 1/1/50, Sombat, 1000
O002, 1/1/50, Somkid, 500,
O003, 2/1/50, Sombat, 1000

ทีนี้ สมมติว่า อยากดู ยอดเฉย ๆ เอาล่ะ ไม่อยากรู้ ORDER ID นี่หว่า อยากจะทำ UNION กับ ข้อมูล หลังร้านเฉยๆ ส่วน ORDERDATE ก็ใช้ WHERE กรองเอาแล้วนี่   ก็เลยทำการ
SELECT custname, amount FROM order WHERE orderdate BETWEEN @begindate AND @enddate
UNION
.......  ซะ 

เมื่อเอาผลลัพธ์จากเจ้า query ตัวนี้ไปใช้ในการ UNION ก็อาจจะทำให้ UNION ไปตัด row ที่ซ้ำ ออกโดยเราไม่ตั้งใจก็ได้  เช่น กรณีนี้ จะเหลือแค่
Sombat, 1000
Somkid, 500

( ผมสมมติแค่ Table query ตัวแรก อันเดียวนะ  จริงๆ  แล้ว UNION จะทำงานกับ rows ที่เป็นผลลัพธ์สุดท้ายนะ คือ เอาทุก rows จากทุก query มารวม ๆ กันก่อน แล้วค่อย ตัด row ซ้ำ ออก )

หรือ ลองพิสูจน์ง่าย ๆ โดยใช้ UNION และ UNION ALL แล้วลองดูแต่ละบรรทัดของ Output  หรือ นับบรรทัด เทียบกัน ก็ได้


สรุป ถ้าวัตถุประสงค์ ต้องการเอา rows จากหลายๆ  Query มารวมกัน โดยไม่ต้องการ remove row ที่ซ้ำแล้ว  ใช้ UNION ALL เถอะ เร็ว และปลอดภัยกว่า

Confirm by : VB NeverDie ; )
« แก้ไขครั้งสุดท้าย: 11 มกราคม 2007, 08:30:25 โดย VB NeverDie ; ) »

Kuke

Re: รบกวนพี่ๆช่วยดูปัญหาของ MySQL ให้หน่อยนะค่ะ
« ตอบกลับ #25 เมื่อ: 18 มกราคม 2007, 11:55:50 »
พี่ๆค่ะตอนนี้กัซแก้ปัญหาได้แล้วค่ะ.....แล้วก้อเริ่มคล่องแล้วด้วย..ขอบคุณมากนะค่ะ...ที่ชี้แนะ O0

worapong2005


SPYMan

น่ารักจังอิๆ งูขึ้นหัวเลย :D :D :D :D :D :D

 O0 เก่งจังครับผมน้องใหม่เพิ่งหัดเขียนฝากตัวด้วยครับ พี่ ๆ
กลุ่มผู้ดูแลระบบแห่งประเทศไทย ขอระงับการใช้ลายเซ็นต์รูปภาพ
อนุญาตให้ใช้ได้เพียง ลายเซ็นต์ที่เป็นข้อความ
จึงประกาศมาเพื่อขอความร่วมมือ จากสมาชิกทุกๆ ท่าน
ในนาม กลุ่มผู้ดูแลระบบแห่งประเทศไทย