สอบถามเรื่อง SQL หน่อยครับ

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา สอบถามเรื่อง SQL หน่อยครับ

สอบถามเรื่อง SQL หน่อยครับ
พอดีผมมีอยู่ 2 ตาราง

1.tbl_application


2.tbl_commettee


ทีนี้ผมอยากจะให้มัน query ออกมาเป็นแบบนี้ไม่ทราบว่าต้องเขียนอย่างไงครับ งมมาหลาย ชม. และ


ขอบคุณล่วงหน้าครับผม


Pusirinon 110.170.246.xxx 26-08-2015 10:44:43

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

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


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


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

 ความคิดเห็นที่ 1
  คิวรี่ ธรรมดาไม่ใช่หรอ ถ้าหมายถึงการจัดเรียง ก็ใช้ ORDER BY regis_id

หรือถ้าต้องการเชื่อมตาราง ลองดูเนื้อหานี้เป็นแนวทาง

การใช้งาน SQL LEFT JOIN 


ninenik 183.89.93.xxx 26-08-2015
 ความคิดเห็นที่ 2
เพิ่มเติมหน่อยครับ ส่วนที่อยากจะให้แสดง


pusirinon 110.170.246.xxx 26-08-2015 10:53
 ความคิดเห็นที่ 3
รูปข้างบนมันไม่ขึ้นครับผม


pusirinon 110.170.246.xxx 26-08-2015 10:54
 ความคิดเห็นที่ 4
ถ้ากรรมการ มีไม่มาก คือถ้า fixed มาแค่ 8 คน
ให้คิวรี่ ตารางที่ 2 เก็บเป็น array 2 มิติ ไว้
เช่น  $arr_ret['id กรรมการ']['id project']=xxxx;

$arr_ret=array();
while($rs=mysql....){
    $arr_ret[$rs['user_id']][$rs['regis_id']]=$rs['ret'];   
}


แล้วก็มาคิวรี่ตารางที่ 1 สร้างรูปแบบกการแสดงผล ตามที่ต้องการ 
ส่วนค่า น่าจะเป็นยอดเงิน ของโครงการ และกรรมการ แต่ละคน ให้เอา ค่า array 
ที่ได้จากตารางที่ 2 มาใส่ โดยอ้างอิงค่า key ของ array

แนวทางก็น่าจะประมาณนี้


ninenik 183.89.93.xxx 26-08-2015
 ความคิดเห็นที่ 5
ขอบคุณครับ


pusirinon 110.170.246.xxx 26-08-2015 11:44
 ความคิดเห็นที่ 6
ถามเพิ่มเติมหน่อยนะคับพี่

อันนี้เป็นตาราง member


พอดีผมลองทำแล้วมันออกมาแค่นี้


อันนี้คือ Code
<meta charset="utf-8" />
<?
$host = "localhost"; 
$user = "root"; 
$pass = "password"; 
$dbase = "consensus_mysql";	

$link = mysql_connect($host,$user,$pass) or die("Connect error : ".mysql_error()); 
mysql_select_db($dbase); 
mysql_query("set character set utf8");
?>
<? 
$sql = "SELECT id, firstname FROM member WHERE status_id =3 ORDER BY id"; 
$rsItem = mysql_query($sql) or die("Select error : ".mysql_error()); 
$item_id = array();
$item = array();
$i = 0;
while($value = mysql_fetch_assoc($rsItem)){
$item_id[$i] = $value['id'];	
$item[$i] = $value['firstname']; 
$i ++;
}
mysql_free_result($rsItem); 

$sql = "SELECT DISTINCT(tbl_commettee.regis_id),project_name, tbl_application.id AS aid, department FROM tbl_commettee RIGHT JOIN tbl_application ON tbl_application.regis_id = tbl_commettee.regis_id ORDER BY tbl_commettee.regis_id";
$rsValue = mysql_query($sql) or die("Select error : ".mysql_error());
$num_rows = mysql_num_rows($rsValue);
if($num_rows>0){
?>
<table width="350" border="0" bgcolor="#000000">
<tr bgcolor="#FFFFFF">
<td align="center"><strong>ลำดับที่</strong></td>
<td align="center"><strong>รหัสเอกสาร</strong></td>
<td align="center"><strong>ชื่อโครงการ</strong></td>
<td align="center"><strong>หน่วยงาน</strong></td>
<?
for($i=0;$i<count($item_id);$i++){
?>
<td align="center"><strong><?=$item[$i]?></strong></td>
<?
}
?>
</tr>
<?
while($ListValue = mysql_fetch_assoc($rsValue)){
?>
<tr bgcolor="#FFFFFF">
<td align="left">&nbsp;<?=$ListValue['aid']?></td>
<td align="left">&nbsp;<?=$ListValue['regis_id']?></td>
<td align="left">&nbsp;<?=$ListValue['project_name']?></td>
<td align="left">&nbsp;<?=$ListValue['department']?></td>
<?

for($i=0;$i<count($item_id);$i++){ 
$sql = "SELECT ret FROM tbl_commettee WHERE regis_id={$ListValue['regis_id']} AND id={$item_id[$i]}";
$rsColValue = mysql_query($sql) or die("Select error : ".mysql_error());
$ColValue = mysql_fetch_assoc($rsColValue); 
?>
<td align="center"><?=number_format($ColValue['ret'])?></td>
<?
mysql_free_result($rsColValue); 
}//end for 
}//end while 
mysql_free_result($rsValue); 
?>
</tr>
</table>
<?
}
else{
echo "<p align='center'><strong>ไม่มีข้อมูล</strong></p>";
}
?>
<?
mysql_close($link); 
?>



pusirinon 110.170.246.xxx 26-08-2015 13:22
 ความคิดเห็นที่ 7
ได้แล้วครับผม


pusirinon 110.170.246.xxx 26-08-2015 14:05
 ความคิดเห็นที่ 8
จากที่ภามไปได้ตามต้องการเป็นแบบนี้ครับ


Code ได้ดังนี้
<meta charset="utf-8" />
<?
include("connectdb.php");

$sql = "SELECT id, firstname FROM member WHERE status_id =3 ORDER BY id"; 
$rsItem = mysql_query($sql) or die("Select error1 : ".mysql_error()); 
$item_id = array();
$item = array();
$i = 0;
while($value = mysql_fetch_assoc($rsItem)){
$item_id[$i] = $value['id'];	
$item[$i] = $value['firstname']; 
$i ++;
}
mysql_free_result($rsItem); 

$sql = "SELECT DISTINCT(tbl_committee.id),project_name, tbl_application.id AS aid, department, tbl_application.regis_id FROM tbl_committee RIGHT JOIN tbl_application ON tbl_application.id = tbl_committee.id ORDER BY tbl_committee.id";
$rsValue = mysql_query($sql) or die("Select error2 : ".mysql_error());
$num_rows = mysql_num_rows($rsValue);
if($num_rows>0){
?>
<table width="350" border="0" bgcolor="#000000">
<tr bgcolor="#FFFFFF">
<td align="center"><strong>ลำดับที่</strong></td>
<td align="center"><strong>รหัสเอกสาร</strong></td>
<td align="center"><strong>ชื่อโครงการ</strong></td>
<td align="center"><strong>หน่วยงาน</strong></td>
<?
for($i=0;$i<count($item_id);$i++){
?>
<td align="center"><strong><?=$item[$i]?></strong></td>
<?
}
?>
</tr>
<?
while($ListValue = mysql_fetch_assoc($rsValue)){
?>
<tr bgcolor="#FFFFFF">
<td align="left">&nbsp;<?=$ListValue['aid']?></td>
<td align="left">&nbsp;<?=$ListValue['regis_id']?></td>
<td align="left">&nbsp;<?=$ListValue['project_name']?></td>
<td align="left">&nbsp;<?=$ListValue['department']?></td>
<?
for($i=0;$i<count($item_id);$i++){ 
$sql = "SELECT ret FROM tbl_committee WHERE id={$ListValue['id']} AND user_id={$item_id[$i]}";
$rsColValue = mysql_query($sql) or die("Select error : ".mysql_error());
$ColValue = mysql_fetch_assoc($rsColValue); 
?>
<td align="center"><?=number_format($ColValue['ret'])?></td>
<?
mysql_free_result($rsColValue); 
}//end for 
}//end while 
mysql_free_result($rsValue); 
?>
</tr>
</table>
<?
}
else{
echo "<p align='center'><strong>ไม่มีข้อมูล</strong></p>";
}
mysql_close(); 
?>

ทีนี้ผมลองทำให้มัน Export to Excel เลยนำ Code ที่พี่เคยแจกไว้มาประยุกดูแต่มันก็ยังผิดอยู่เลยจะรบกวนช่วยแนะนำหน่อยครับ Code ดังนี้
<?php
$connection=mysql_connect("localhost","root","password") or die("เชื่อมต่อฐานข้อมูลไม่ได้");
mysql_select_db("consensus_mysql") or die("ไม่สามารถเลือกฐานข้อมูลได้");
mysql_query("set character set utf8"); // กำหนดค่า character set ที่จะใช้แสดงผล
$sql = "SELECT id, firstname FROM member WHERE status_id =3 ORDER BY id"; 
$rsItem = mysql_query($sql) or die("Select error1 : ".mysql_error()); 
$item_id = array();
$item = array();
$i = 0;
while($value = mysql_fetch_assoc($rsItem)){
$item_id[$i] = $value['id'];	
$item[$i] = $value['firstname']; 
$i ++;
}
mysql_free_result($rsItem); 

$sql = "SELECT DISTINCT(tbl_committee.id),project_name, tbl_application.id AS aid, department, tbl_application.regis_id FROM tbl_committee RIGHT JOIN tbl_application ON tbl_application.id = tbl_committee.id ORDER BY tbl_committee.id";
$rsValue = mysql_query($sql) or die("Select error2 : ".mysql_error());
$num_rows = mysql_num_rows($rsValue);
if($num_rows>0){
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=total-score.xls "); 
?>
<?php echo '<?xml version="1.0" encoding="utf-8"?>'; ?>

<?php echo'<?mso-application progid="Excel.Sheet"?>';?>

<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font x:CharSet="222"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
 </Styles>
 <Worksheet ss:Name="รวมคะแนนคณะกรรมการกลั่นกรอง">
  <Table ss:ExpandedColumnCount="<?=$item[$i]?>" ss:ExpandedRowCount="<?=$num_rows+1?>" x:FullColumns="1"
   x:FullRows="1">
   <Row>
    <Cell><Data ss:Type="String">ลำดับที่</Data></Cell>
    <Cell><Data ss:Type="String">รหัสเอกสาร</Data></Cell>
    <Cell><Data ss:Type="String">ชื่อโครงการ</Data></Cell>
    <Cell><Data ss:Type="String">หน่วยงาน</Data></Cell>
<?php
for($i=0;$i<count($item_id);$i++){
?>
    <Cell><Data ss:Type="String"><?=$item[$i]?></Data></Cell>
<?php
}
?>
   </Row>
<?php
while($ListValue = mysql_fetch_assoc($rsValue)){
?>
   <Row>
    <Cell><Data ss:Type="Number"><?=$rs['id']?></Data></Cell>
    <Cell><Data ss:Type="String"><?=$rs['regis_id']?></Data></Cell>
    <Cell><Data ss:Type="String"><?=$rs['project_name']?></Data></Cell>
    <Cell><Data ss:Type="String"><?=$rs['department']?></Data></Cell>
<?
for($i=0;$i<count($item_id);$i++){ 
$sql = "SELECT ret FROM tbl_committee WHERE id={$ListValue['id']} AND user_id={$item_id[$i]}";
$rsColValue = mysql_query($sql) or die("Select error : ".mysql_error());
$ColValue = mysql_fetch_assoc($rsColValue); 
?>
    <Cell><Data ss:Type="Number"><?=number_format($ColValue['ret'])?></Data></Cell>
<?php
mysql_free_result($rsColValue); 
}//end for 
}//end while 
mysql_free_result($rsValue); 
?>

   </Row>
  </Table>
<?
}
else{
echo "<p align='center'><strong>ไม่มีข้อมูล</strong></p>";
}
?>
<?
mysql_close(); 
?>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <Selected/>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
</Workbook>


pusirinon 110.170.246.xxx 26-08-2015 16:07
 ความคิดเห็นที่ 9
ลองใช้เป็น PHPExcel อาจช่วยได้ ตามบทความนี้เป็นแนวทาง

ออกรายงานเป็น excel ไฟล์ด้วย PHPExcel ตอนเริ่มใช้ 


ninenik 1.47.234.xxx 26-08-2015
 ความคิดเห็นที่ 10
จากที่พี่ให้มาและลองทำดูมันยังขึ้น error ทั้งที่เปิดตัว extension = php_zip.dll แล้วแต่มันขึ้น error แบบนี้ครับ

10:29:08 Create new PHPExcel object
10:29:08 Set document properties
10:29:08 Add some data
10:29:08 Rename worksheet
10:29:08 Write to Excel2007 format

Fatal error: Uncaught exception 'PHPExcel_Writer_Exception' with message 'Could not close zip file excel_files/excel_by_phpexcel_database.xlsx.' in D:AppServwwwPHPExcelClassesPHPExcelWriterExcel2007.php:399 Stack trace: #0 D:AppServwwwPHPExcelsample_excel_database.php(82): PHPExcel_Writer_Excel2007->save('excel_files/exc...') #1 {main} thrown in D:AppServwwwPHPExcelClassesPHPExcelWriterExcel2007.php on line 399


pusirinon 110.170.246.xxx 27-08-2015 10:31
1 2 Next






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