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

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

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

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

select dmy, topic, s1, s2 from mandetail



Jakudon 49.231.229.xxx 31-10-2017 12:10:45

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

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


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


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

 ความคิดเห็นที่ 1
น่าจะต้องเล่นกับมิติของ Array อ่านแนวทางด้านล่างดู
 
เริ่มต้นให้สร้างตาราง ให้ได้รูปแบบคล้ายกับที่ต้องการ โดยตัดส่วนที่จะมีการวนซ้ำทั้งในแนวตั้ง
และแนวนอนออก แล้วใส่ตัวอักษรภาษาอังกฤษกำกับไป ประมาณนี้
 
<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>
 
 
เตืมสีให้กับซ่องรายการที่จะมีการวนลูปแสดงซ้ำไปในแนวตั้ง  ดังรูป
 
 
จากนั้นไปเพิ่มโค้ดการวนลูปในส่วนที่เราได้กำหนดสีพื้นหลังไว้ จะได้เป็น
 
<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>
 
เอาสีออก ต่อไปเติมสีให้ส่วนของรายการที่จะมีการวนลูปแสดงซ้ำไปในแนวนอน ดังรูป
 
 
จากนั้นไปเพิ่มโค้ดการวนลูปในส่วนที่เราได้กำหนดสีพื้นหลังไว้ จะได้เป็น
 
<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
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title></title>
  <link rel="stylesheet" href="https://unpkg.com/bootstrap@3.3.7/dist/css/bootstrap.min.css">
</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 27.55.72.xxx 31-10-2017
 ความคิดเห็นที่ 2
ขอบคุณมากครับ จะนำโค้ดไปศึกษาและฝึกฝีมือต่อไปครับ


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


gg1621148516 171.6.225.xxx 24-06-2021 11:16
1






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