สอบถามเรื่องการดำหนดค่า sql เพื่อดึงข้อมูลจากฐานข้อมูล
ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา สอบถามเรื่องการดำหนดค่า sql เพื่อดึงข้อมูลจากฐานข้อมูล
สอบถามเรื่องการดำหนดค่า sql เพื่อดึงข้อมูลจากฐานข้อมูล
รบกวนสอบถามการกำหนดค่า sql ในการดึงข้อมูลจากฐานข้อมูล ตามแบบในภาพนี้ครับ
ไม่ทราบว่าจะต้องกำหนดยังไงบ้างครับ
ไม่ทราบว่าจะต้องกำหนดยังไงบ้างครับ
select dmy, topic, s1, s2 from mandetail

คำแนะนำ และการใช้งาน
สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก
- ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
ความคิดเห็นที่
1
น่าจะต้องเล่นกับมิติของ Array อ่านแนวทางด้านล่างดู
เริ่มต้นให้สร้างตาราง ให้ได้รูปแบบคล้ายกับที่ต้องการ โดยตัดส่วนที่จะมีการวนซ้ำทั้งในแนวตั้ง
และแนวนอนออก แล้วใส่ตัวอักษรภาษาอังกฤษกำกับไป ประมาณนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <table width= "100" border= "0" cellspacing= "0" cellpadding= "0" > <tr> <td rowspan= "2" align= "center" >A</td> <td colspan= "2" align= "center" >D</td> </tr> <tr> <td align= "center" >E</td> <td align= "center" >F</td> </tr> <tr> <td align= "center" >B</td> <td align= "center" >G</td> <td align= "center" >H</td> </tr> <tr> <td align= "center" > </td> <td align= "center" > </td> <td align= "center" > </td> </tr> <tr> <td align= "center" >C</td> <td align= "center" >I</td> <td align= "center" >J</td> </tr> </table> |
เตืมสีให้กับซ่องรายการที่จะมีการวนลูปแสดงซ้ำไปในแนวตั้ง ดังรูป
จากนั้นไปเพิ่มโค้ดการวนลูปในส่วนที่เราได้กำหนดสีพื้นหลังไว้ จะได้เป็น
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <table width= "100" border= "0" cellspacing= "0" cellpadding= "0" > <tr> <td rowspan= "2" align= "center" >A</td> <td colspan= "2" align= "center" >D</td> </tr> <tr> <td align= "center" >E</td> <td align= "center" >F</td> </tr> <?php for ( $y =1; $y <=3; $y ++){?> <tr> <td align= "center" bgcolor= "#FFFF00" >B</td> <td align= "center" bgcolor= "#FFFF00" >G</td> <td align= "center" bgcolor= "#FFFF00" >H</td> </tr> <?php } ?> <tr> <td align= "center" > </td> <td align= "center" > </td> <td align= "center" > </td> </tr> <tr> <td align= "center" >C</td> <td align= "center" >I</td> <td align= "center" >J</td> </tr> </table> |
เอาสีออก ต่อไปเติมสีให้ส่วนของรายการที่จะมีการวนลูปแสดงซ้ำไปในแนวนอน ดังรูป
จากนั้นไปเพิ่มโค้ดการวนลูปในส่วนที่เราได้กำหนดสีพื้นหลังไว้ จะได้เป็น
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <table width= "100" border= "0" cellspacing= "0" cellpadding= "0" > <tr> <td rowspan= "2" align= "center" >A</td> <?php for ( $x =1; $x <=3; $x ++){?> <td colspan= "2" align= "center" bgcolor= "#00FF00" >D</td> <?php } ?> </tr> <tr> <?php for ( $x =1; $x <=3; $x ++){?> <td align= "center" bgcolor= "#00FF00" >E</td> <td align= "center" bgcolor= "#00FF00" >F</td> <?php } ?> </tr> <?php for ( $y =1; $y <=3; $y ++){?> <tr> <td align= "center" >B</td> <?php for ( $x =1; $x <=3; $x ++){?> <td align= "center" bgcolor= "#00FF00" >G</td> <td align= "center" bgcolor= "#00FF00" >H</td> <?php } ?> </tr> <?php } ?> <tr> <td align= "center" > </td> <?php for ( $x =1; $x <=3; $x ++){?> <td align= "center" bgcolor= "#00FF00" > </td> <td align= "center" bgcolor= "#00FF00" > </td> <?php } ?> </tr> <tr> <td align= "center" >C</td> <?php for ( $x =1; $x <=3; $x ++){?> <td align= "center" bgcolor= "#00FF00" >I</td> <td align= "center" bgcolor= "#00FF00" >J</td> <?php } ?> </tr> </table> |
เอาสีออก ทดสอบรัน จะได้ผลลัพธ์ดังรูป
ตอนนี้เราได้โครงสร้างรูปแบบตารางข้อมูลตามต้องการแล้ว ต่อไปก็สร้าง array มาวนลูปแสดง
แทนค่าสมมติ ลองดูโค้ดนี้เป็นแนวทาง ทดสอบรันดูผลลัพธ์
ไฟล์ table.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | <!DOCTYPE html> <html> <head> <meta charset= "utf-8" > <meta name= "viewport" content= "width=device-width" > <title></title> </head> <body> <br> <br> <?php // array ข้อมูลสมมติ สามารถประยุกต์กับ database แทนได้ $arrData = array ( array ( "userid" =>1, "dateval" => '01102017' , "s1" =>10, "s2" =>10 ), array ( "userid" =>1, "dateval" => '01102017' , "s1" =>20, "s2" =>5 ), array ( "userid" =>2, "dateval" => '01102017' , "s1" =>5, "s2" =>10 ), array ( "userid" =>1, "dateval" => '02102017' , "s1" =>5, "s2" =>15 ), array ( "userid" =>1, "dateval" => '02102017' , "s1" =>10, "s2" =>5 ), array ( "userid" =>2, "dateval" => '02102017' , "s1" =>10, "s2" =>5 ), array ( "userid" =>3, "dateval" => '03102017' , "s1" =>5, "s2" =>10 ) ); $arr_y_userid = array (); $arr_y_date = array (); $arr_y_date_s1 = array (); $arr_y_date_s2 = array (); foreach ( $arrData as $data ){ $arr_y_userid [ $data [ 'userid' ]] = $data [ 'userid' ]; // เป็น array 1 มิติ ค่าวนลูปแนวตั้ง $arr_y_date [ $data [ 'dateval' ]] = $data [ 'dateval' ]; // เป็น array 1 มิติ ค่าวนลูปแนวนอน $arr_y_date_s1 [ $data [ 'userid' ]][ $data [ 'dateval' ]][ 's1' ][] = $data [ 's1' ]; $arr_y_date_s2 [ $data [ 'userid' ]][ $data [ 'dateval' ]][ 's2' ][] = $data [ 's2' ]; } ?> <div style= "width:750px;margin:auto;" > <div class = "table-responsive" > <table class = "table table-bordered" > <tr class = "active" > <td rowspan= "2" align= "center" >A</td> <?php foreach ( $arr_y_date as $date ){ ?> <td colspan= "2" align= "center" ><?= $date ?></td> <?php } ?> </tr> <tr class = "active" > <?php foreach ( $arr_y_date as $date ){ ?> <td width= "100" align= "center" >F</td> <td width= "100" align= "center" >G</td> <?php } ?> </tr> <?php // ตำแปรสำหรับเก็บค่าผลรวมในแต่ละคอลัมน์ของข้อมูล $total_s1 = array (); $total_s2 = array (); ?> <?php foreach ( $arr_y_userid as $userid ){ ?> <tr> <td width= "100" align= "center" ><?= $userid ?></td> <?php foreach ( $arr_y_date as $date ){ ?> <?php $val_s1 = 0; $val_s2 = 0; if (! is_null ( $arr_y_date_s1 [ $userid ]) && array_key_exists ( $date , $arr_y_date_s1 [ $userid ])){ $val_s1 = array_sum ( $arr_y_date_s1 [ $userid ][ $date ][ 's1' ]); $val_s2 = array_sum ( $arr_y_date_s2 [ $userid ][ $date ][ 's2' ]); } $total_s1 [ $date ][] = $val_s1 ; $total_s2 [ $date ][] = $val_s2 ; ?> <td align= "center" > <?= $val_s1 ?> </td> <td align= "center" > <?= $val_s2 ?> </td> <?php } ?> </tr> <?php } ?> <tr> <td align= "center" > </td> <?php foreach ( $arr_y_date as $date ){ ?> <td align= "center" > </td> <td align= "center" > </td> <?php } ?> </tr> <tr> <td align= "center" >C</td> <?php foreach ( $arr_y_date as $date ){ ?> <td align= "center" > <?= array_sum ( $total_s1 [ $date ])?> </td> <td align= "center" > <?= array_sum ( $total_s2 [ $date ])?> </td> <?php } ?> </tr> </table> </div> </div> </body> </html> |
จะได้ดังรูปด้านล่าง
กรณีการแสดงข้อมูลไปทางแนวนอนมีขนาดยาวมากๆ สามารถใช้ bootstrap table responsive มา
ประยุกต์ได้

ความคิดเห็นที่
2
ขอบคุณมากครับ จะนำโค้ดไปศึกษาและฝึกฝีมือต่อไปครับ


ความคิดเห็นที่
3
สุดยอดมากครับ คุณนิค ผมปรับใช้โคดนี้ น้ำตาจะไหล ลูกสาวได้ค่านมแล้วครับ


ขอบคุณทุกการสนับสนุน
![]()