สอบถามเรื่องการดำหนดค่า sql เพื่อดึงข้อมูลจากฐานข้อมูล

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

สอบถามเรื่องการดำหนดค่า sql เพื่อดึงข้อมูลจากฐานข้อมูล
รบกวนสอบถามการกำหนดค่า sql ในการดึงข้อมูลจากฐานข้อมูล ตามแบบในภาพนี้ครับ

ไม่ทราบว่าจะต้องกำหนดยังไงบ้างครับ

select dmy, topic, s1, s2 from mandetail



Jakudon 31-10-2017 12:10:45

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 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">&nbsp;</td>
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;</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">&nbsp;</td>
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;</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">&nbsp;</td>
    <?php for($x=1;$x<=3;$x++){?>   
    <td align="center" bgcolor="#00FF00">&nbsp;</td>
    <td align="center" bgcolor="#00FF00">&nbsp;</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">&nbsp;</td>
    <?php  foreach($arr_y_date as $date){ ?> 
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;</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 มา
ประยุกต์ได้
 


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


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


gg1621148516 24-06-2021 11:16
1






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ