รบกวนสอบถามเรื่องการเชื่อมตารางเเละการดึงข้อมูลบางส่วนค่ะ mysql

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

รบกวนสอบถามเรื่องการเชื่อมตารางเเละการดึงข้อมูลบางส่วนค่ะ mysql
รบกวนสอบถามค่ะ คือมีตารางอยู่ 2 ตาราง  risk_master และ risk_supervise 
โดย risk_master มีคอลัมป์ดังนี้ riskno,riskyear,deptID,risksubject,riskcat,flag
,impactlevel,problevel  และตาราง risk_supervise จะมีคอลัมป์ riskno ,impactlevel,problevel
ซึ่งถ้าเราต้องการเอาค่า impactlevel กับ problevel ของ risk_supervise มาใส่ใน impactlevel กับ problevel ของ risk_master แต่ถ้า ค่า impactlevel กับ problevel ของ risk_supervise ไม่มีให้ใช้ค่าเดิม(ค่าของrisk_master)  เพื่อเอามาคูณกัน  (impactlevel * problevel as riskscore) ควรเขียน sql อย่างไรคะ


สรุปคือ ถ้ามีค่าimpactlevel * problevelใน risk_supervise ให้เอามาใส่แทน risk_master แต่ถ้าเป็นค่าว่างให้เอาค่าเดิมใน risk_master  โดยเชื่อมกันโดย riskno คะ่ งงมั๊ยคะ 
 


Sudarat2536 08-05-2015 14:41:14

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

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


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


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

 ความคิดเห็นที่ 1
ขึ้นกับว่าเพื่อแสดง หรือว่าเพื่ออัพเดทเข้าฐานข้อมูล
ถ้าเพื่อนำมาแสดง ก็ใช้ ่เป็น join ตารางกันปกติ แล้วตอนแสดงใช้เงื่อนไข php จัดการ

https://www.ninenik.com/article_cat.php?arti_cat=9




ninenik 08-05-2015
 ความคิดเห็นที่ 2
ขอถามต่อนะคะ พอดีเป็นมือใหม่หัดเขียน ค่ะ ถ้าเขียนคำสั่งวนลูปว่า  ถ้าเจอ  problevel ,impactlevel ของ risk_supervise (โดยที่จะต้องมี riskno เหมือนกัน ใน risk_master) ให้เอามาอัพเดตใส่ problevel,impactlevel ของ risk_master แต่ถ้าไม่เจอ ก็ให้เอาของเดิมของ risk_master จะเขียนอย่างไรคะ ต้องขอโทษด้วยค่ะ รบกวนด้วยนะคะ


sudarat2536 11-05-2015 08:53
 ความคิดเห็นที่ 3
อันนี้
<?
		set_time_limit(10);
		require_once "include/class.writeexcel_workbook.inc.php";
		require_once "include/class.writeexcel_worksheet.inc.php";
		include_once("include/dbutils.php");
		include_once("include/display.php");
		include_once("include/datetime.php");
		include_once("include/chkcond.php");
		
		$f_riskyear="2558"; 
		$f_id=$_GET[id]; 
		$reptype=$_GET[reptype]; 
	if ($reptype=='division')  $str=" and divisionID='$f_id' "; 
	if ($reptype=='department')  $str=""; 
	if ($reptype=='summary')  $str=""; 

		$strtmp="select  count(*) as cnt  from risk_master where riskyear='2558' $str ";
		$riskinfo=selectsql($strtmp);
		if ($riskinfo[cnt]==0) {  echo "<script>alert('ไม่พบข้อมูลปี พ.ศ. $f_riskyear'); window.close(); </script>";  }
		else { 
			$thailongmonth=array("มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม");
			if ($reptype=='division') {
					$strtmp="select divisionNameThai,divisionShortThai from person.division where divisionID='".$f_id."'";
					$divisioninfo=selectsql($strtmp);
			}
			if ($reptype=='department') {
					$strtmp="select deptNameThai,deptShortThai from person.department where deptID='".$f_id."'";
					$departmentinfo=selectsql($strtmp);
			}
			$strtmp="select stdate,eddate from risk_period where periodtype='02' and periodyear='".(intval($f_riskyear)-543)."'";
			$periodinfo=selectsql($strtmp);
			$f_date1=intval(substr($periodinfo[stdate],8,2));
			$f_month1=$thailongmonth[intval(substr($periodinfo[stdate],5,2))-1];
			$f_year1=intval(substr($periodinfo[stdate],0,4))+543;
			$f_date2=intval(substr($periodinfo[eddate],8,2));
			$f_month2=$thailongmonth[intval(substr($periodinfo[eddate],5,2))-1];
			$f_year2=(intval(substr($periodinfo[eddate],0,4))+543);
		}
				 ;
            	$link = open_database();
				$strSQL="select  riskno,risksubject,deptID,riskcat,problevel*impactlevel as riskscore from risk_master  where riskyear='$f_riskyear' and flag='N' order by  riskscore desc ";
				$dbqueryI2 = mysql_query($strSQL, $link);

				$numrisk=mysql_num_rows($dbqueryI2);

				if ($numrisk>0) {
			
$fnameprog= "sumbyscore".date("His").".xls";
$fname = tempnam("/tmp",$fnameprog);
$workbook = &new writeexcel_workbook($fname);

if ($reptype=='division') 	$worksheet = &$workbook->addworksheet('ระดับฝ่าย'); 
if ($reptype=='department') 	$worksheet = &$workbook->addworksheet('ระดับหน่วยงาน'); 
if ($reptype=='summary')  $worksheet = &$workbook->addworksheet('ระดับองค์กร'); 

$worksheet->hide_gridlines(2);
$worksheet->set_landscape();
$worksheet-> fit_to_pages(1,0);
$worksheet->set_margins(0.25);

# Write some text
$company =& $workbook->addformat();
$company->set_bold();
$company->set_underline();
$company->set_align('center');
$company->set_size(12);

$showdate =& $workbook->addformat();
$showdate->set_align('right');
$showdate->set_size(9);

$title1 =& $workbook->addformat();
$title1->set_bold();
$title1->set_align('center');
$title1->set_size(12);

$title2 =& $workbook->addformat();
$title2->set_align('left');
$title2->set_text_wrap();
$title2->set_size(12);

$header1=& $workbook->addformat();
$header1->set_bold();
$header1->set_underline();
$header1->set_align('left');
$header1->set_size(11);

$header2=& $workbook->addformat();
$header2->set_align('center');
$header2->set_valign('top');
$header2->set_text_wrap();
$header2->set_top();
$header2->set_bottom();
$header2->set_left();
$header2->set_right();
$header2->set_size(11);

$detail1 =& $workbook->addformat();
$detail1->set_align('left');
$detail1->set_valign('top');
$detail1->set_text_wrap();
$detail1->set_left();
$detail1->set_right();
$detail1->set_top(); 
$detail1->set_bottom();
$detail1->set_size(11);

$detail2 =& $workbook->addformat();
$detail2->set_align('left');
$detail2->set_valign('top');
$detail2->set_text_wrap();
$detail2->set_left();
$detail2->set_right();
$detail2->set_top();
$detail2->set_bottom();
$detail2->set_size(11);

$worksheet->set_column(0,0,19.5);
$worksheet->set_column(1,1,20);
$worksheet->set_column(2,2,50);
$worksheet->set_column(3,3,15);
$worksheet->set_column(4,4,15);
$worksheet->set_column(5,5,15);
$maxcol=5;

$worksheet->write(1, 0,  "สรุปรายการความเสี่ยงระดับฝ่าย  ประจำไตรมาสที่1/ ".$f_riskyear,  $title1);
$worksheet->merge_cells(1,0,1,$maxcol);
$worksheet->merge_cells(2,0,2,$maxcol);
$row=3;
	
$worksheet->write($row,0,"หน่วยงาน",$header2);
$worksheet->write($row+1,0,"",$header2);
$worksheet->merge_cells($row,0,$row+1,0);
$worksheet->write($row,1,"ปัจจัยเสี่ยงเลขที่",$header2);
$worksheet->write($row+1,1,"",$header2);
$worksheet->merge_cells($row,1,$row+1,1);
$worksheet->write($row,2,"ชื่อปัจจัยเสี่ยง",$header2);
$worksheet->write($row+1,2,"",$header2);
$worksheet->merge_cells($row,2,$row+1,2);
$worksheet->write($row,3,"ประเภทของปัจจัยเสี่ยง (SOFC)",$header2);
$worksheet->write($row+1,3,"",$header2);
$worksheet->merge_cells($row,3,$row+1,3);
$worksheet->write($row,4,"คะแนน (I X L)",$header2);
$worksheet->write($row+1,4,"",$header2);
$worksheet->merge_cells($row,4,$row+1,4);
$worksheet->write($row,5,"Risk Score",$header2);
$worksheet->write($row+1,5,"",$header2);
$worksheet->merge_cells($row,5,$row+1,5);
$worksheet->repeat_rows($row, $row+1);
					$row+=2;
					
					$i=0;
					while ($i<$numrisk)	{
							mysql_data_seek($dbqueryI2,$i);
							$info= mysql_fetch_object($dbqueryI2);
							$col=0;
							$strSQL="select  deptShortThai from person.department where deptID='$info->deptID' ";
							$dbquerytmp = mysql_query($strSQL, $link);
							$infotmp=mysql_fetch_array($dbquerytmp);
							$worksheet->write($row,$col++,$infotmp[deptShortThai],$detail2);
							$f_deptid=$infotmp[deptShortThai];							
							$worksheet->write($row,$col++,$info->riskno,$detail2);
							$worksheet->write($row,$col++,stripslashes($info->risksubject),$detail1);
							$worksheet->write($row,$col++,stripslashes($info->riskcat),$detail1);
							$strSQL="select  problevel,impactlevel,problevel*impactlevel as riskscore  from risk_supervise where riskno='$info->riskno'";
							$dbquerytmp = mysql_query($strSQL, $link);
							$cntrow1=mysql_num_rows($dbquerytmp);
							if ($cntrow1>0) {
							$infotmp=mysql_fetch_array($dbquerytmp);
							
							$worksheet->write($row,$col++,stripslashes($infotmp[problevel]).' X '.($infotmp[impactlevel]),$detail2);
							$worksheet->write($row,$col++,stripslashes($infotmp[riskscore]),$detail2);

							 }
							else {

							$strSQL="select  problevel,impactlevel,problevel*impactlevel as riskscore from risk_analyze where riskno='$info->riskno'";
							$dbquerytmp = mysql_query($strSQL, $link);
							$infotmp=mysql_fetch_array($dbquerytmp);

							$worksheet->write($row,$col++,stripslashes($infotmp[impactlevel]).' X '.($infotmp[problevel]),$detail2);
							$worksheet->write($row,$col++,stripslashes($infotmp[riskscore]),$detail2);
						
							}
   			    			$row++;
			   				$i++;
					}
$worksheet->write($row,$maxcol,date('d-m-y H:m:s'),$showdate);	
$workbook->close();
}
mysql_free_result($dbqueryI2);
close_database($link);
if ($numrisk>0) {
header("Content-Type: application/x-msexcel");
header('Content-disposition: attachment; filename="'.$fnameprog.'"');
$fh=fopen($fname, "rb");
fpassthru($fh);
unlink($fname);

}

?>


sudarat2536 11-05-2015 09:19
 ความคิดเห็นที่ 4
ดูคำสั่ง sql นี้เป็นแนวทาง

SELECT 
a.*,b.*,
IF(a.impactlevel="" AND a.problevel="" ,b.impactlevel*b.problevel,a.impactlevel*a.problevel) as riskscore
FROM risk_master a 
LEFT JOIN risk_supervise b
ON a.riskno=b.riskno 
WHERE a.riskyear='$f_riskyear' and a.flag='N' order by  riskscore desc


ninenik 11-05-2015
 ความคิดเห็นที่ 5
ขอบคุณค่ะ เดี๋ยวอลงทำดูนะคะ


sudarat2536 11-05-2015 13:20
 ความคิดเห็นที่ 6
รบกวนอีกรอบ ถ้าเขียนคำสั่งวนลูปว่า  ถ้าเจอ  problevel ,impactlevel ของ risk_supervise (โดยที่จะต้องมี riskno เหมือนกัน ใน risk_master) ให้เอามาอัพเดตใส่ problevel,impactlevel ของ risk_master แต่ถ้าไม่เจอ ก็ให้เอาของเดิมของ risk_master มาเเสดงสรุปคือ ถ้ามีค่าใน risk_supervise ให้เอามาทับ ค่าเดิมเเต่จะมีบางช่องที่ใช้ค่าเดิมอยู่ จะเขียนเป็น php อย่างไร


sudarat2536 11-05-2015 14:09
 ความคิดเห็นที่ 7
เอ่อ พี่คะ ได้แนวทางเเล้วค่ะ ขอบคุณมากสำหรับคำแนะนำ 


sudarat2536 11-05-2015 15:25
1






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