 |
รบกวน เรื่อง Sub Query, Columns MySQL ด้วยครับ ติดเรื่องนี้มานานแล้ว |
|
 |
|
|
 |
 |
|
ยากหน่อยน่ะครับ แบบนี้ ถ้ามันยากเกินให้ทำที่ php แทนครับ
|
 |
 |
 |
 |
Date :
2011-10-24 08:05:29 |
By :
webmaster |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อย่างที่คุณ mr.win ว่านะครับคือไม่ใช่ยากอย่างเดียวมันต้องดูที่ข้อมูลในอนาคตด้วยว่าข้อมูลที่เพิ่มมีลักษณะแบบไหน
เป็นไปในรูปแบบ A, B, C, D แค่นี้เพิ่มเฉพาะ value กับ pid หรือเปล่า อะไรทำนองนี้น่ะครับ ถึงจะเขียนได้ตรงตามความต้องการจริงๆครับ
อันนี้เป็นตัวอย่างในแบบ Oracle นะครับ ผมไม่แน่ใจว่าเป็น mysql ซ้อน sub แบบนี้ได้หรือเปล่า ต้องลองดูครับ เป็นอีกแนวทางหนึ่งเผื่อจะมีประโยชน์กับท่าน
SELECT A.PID,
A.VALUE AS A,
B.VALUE AS B,
C.VALUE AS C,
D.VALUE AS D
FROM
( SELECT PID, CODE, VALUE FROM TABLENAME WHERE CODE = 'A' ) A,
( SELECT PID, CODE, VALUE FROM TABLENAME WHERE CODE = 'B' ) B,
( SELECT PID, CODE, VALUE FROM TABLENAME WHERE CODE = 'C' ) C,
( SELECT PID, CODE, VALUE FROM TABLENAME WHERE CODE = 'D' ) D
WHERE A.PID = B.PID AND
A.PID = C.PID AND
A.PID = D.PID;
ได้ไม่ได้อย่างไร ลองดูครับ ผมก็ไม่ค่อยเชี่ยวชาญสักเท่าไหร่ หรืออาจจะมีแนวทางที่ดีกว่านี้ต้องประยุกต์เอาครับ
|
ประวัติการแก้ไข 2011-10-24 10:09:34 2011-10-24 10:09:53 2011-10-24 10:16:40
 |
 |
 |
 |
Date :
2011-10-24 10:08:32 |
By :
bitoey |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอนแรกใช้ select case when จะได้ประมาณนี้
pid A B C D
1 10 0 0 0
1 0 20 0 0
1 0 0 12 0
1 0 0 0 15
2 11 0 0 0
2 0 21 0 0
2 0 0 11 0
2 0 0 0 16
ก็เลยปรับเป็น select มาทีละชุดแล้ว Left join เอา พอได้แต่ติด ข้อจำกัดจำนวนครั้งที่ join เพราะ field ที่ต้องการเยอะมาก
ตอนแรกก็ใช้โค๊ดฝั่ง app ช่วยครับ แต่อยากลองดูว่า ถ้า query ทีเดียวจบ โปรแกรมจะเร็วขึ้นมั้ย
ขอบคุณทั้งสองท่านครับ
เดี๋ยวเอาวิธี คุณ BaiToey ไปลองต่อ ได้ผลยังงัยจะเอามาแชร์ครับ
|
 |
 |
 |
 |
Date :
2011-10-24 11:49:45 |
By :
ช่วยด้วยครับ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ปัญหาก็คือ ถ้าข้อมูลมันมีขึ้นมาเรื่อย ๆ ครับ
|
 |
 |
 |
 |
Date :
2011-10-24 11:53:41 |
By :
webmaster |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 4 เขียนโดย : webmaster เมื่อวันที่ 2011-10-24 11:53:41
รายละเอียดของการตอบ ::
ใช่ครับ แต่ผู้ใช้อยากได้รายงานแแบบนี้ แบบรายงานตายตัวครับ ข้อมูลอ่ะครับ มันจะเพิ่มcode test เข้ามาเอยะแยะ
ประมาณว่าฐานเดิมเราไม่ได้ออกแบบ แต่ต้องออกรายงานให้เขาแบบนี้ เขียนลูป php กว่าจะดึงข้อมูลเสร็จ เล่นเอานานๆ มากเลยครับ
แต่ถ้าพี่มีวิธีที่เร็ว แนะนำด้วยครับ เพราะผมมือใหม่ยังไม่คล่อง เท่าไหร่ครับ
ตอบความคิดเห็นที่ : 2 เขียนโดย : bitoey เมื่อวันที่ 2011-10-24 10:08:32
รายละเอียดของการตอบ ::
ผมลองแล้ว
select a.hn,
a.result_lab as alt,
b.result_lab as ast,
c.result_lab as alp
from
(select hn,result_lab from result_lab_opd WHERE `regdate` = '2011-09-26' and labcode='010490' and lab_seq='3' ) a,
(select hn,result_lab from result_lab_opd WHERE `regdate` = '2011-09-26' and labcode='010490' and lab_seq='2' ) b,
(select hn,result_lab from result_lab_opd WHERE `regdate` = '2011-09-26' and labcode='010490' and lab_seq='1' ) c
where a.hn=b.hn and
a.hn=c.hn
แบบนี้ใช้ได้เลยครับ ขอบคุณ คุณ BaiToey ครับ
|
 |
 |
 |
 |
Date :
2011-10-24 12:12:43 |
By :
ช่วยด้วยครับ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|