PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum

รบกวนสอบถามการตัดค่า NULL และการเรียงลำดับ select SQL ค่ะ

รบกวนสอบถามการตัดค่า NULL และการเรียงลำดับ select SQL ค่ะ
ต้องการทราบว่าหาก ไม่ต้องการแสดงข้อมูลที่มีค่า NULL ใน impactlevel หรือ problevel ต้องใส่ not null ยังไงคะ 
และถ้าจะเรียงลำดับจาก riskscore จะต้องทำยังไงคะเพราะว่าการเเสดงผลตารางนี้เกิดจากการเอาค่าจากสองตารางมาเเสดงค่ะ คือถ้ามีข้อมูลใน supervise ก็เอามาใส่ถ้าไม่มีให้เอาของ master มาเเทนอย่างนี้น่ะค่ะ รบกวนด้วยนะคะ 
							$strSQL="select  problevel,impactlevel,problevel*impactlevel as riskscore from risk_supervise where riskno='$info->riskno' ";
							$dbquerytmp = mysql_query($strSQL, $link);
							
						//	$infotmp=mysql_fetch_array($dbquerytmp);
							

							$cntrow1=mysql_num_rows($dbquerytmp);
							if ($cntrow1>0) {
							$infotmp=mysql_fetch_array($dbquerytmp);
							
							$worksheet->write($row,$col++,stripslashes($infotmp[impactlevel]).' X '.($infotmp[problevel]),$detail2);
							$worksheet->write($row,$col++,stripslashes($infotmp[riskscore]),$detail2);

							 }
							else {

							$strSQL="select  problevel,impactlevel,problevel*impactlevel as riskscore from risk_master 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);
						
							}


โดย:  Sudarat2536 IP: 118.174.64.xxx วันที่: 18-05-2015 เวลา: 10:58:37

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

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


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


  • ( หรือ สามารถทำการ สมัครสมาชิก และล็อกอิน ด้วย ปุ่ม Log in with Facebook ด้านล่าง )
 ความคิดเห็นที่ 15
อ่อ ขอบคุณมากค่ะ ^^

โดย:  Sudarat2536 IP: 118.174.187.xxx วันที่: 20-05-2015 เวลา: 08:23:34
 ความคิดเห็นที่ 14
น่าจะจัดรูปแบบ excel ไม่ถูกต้องหรือเปล่า เช่นจำนวนคอลัมน์หรือแุถว ไม่สอดคล้องกับขัอมูล ต้องไล่ดูเอา 

โดย:  Ninenik IP: 180.183.9.xxx วันที่: 19-05-2015
 ความคิดเห็นที่ 13
หน่วยงาน ปัจจัยเสี่ยงเลขที่ ชื่อปัจจัยเสี่ยง ประเภทของปัจจัยเสี่ยง คะแนน (I X L) Risk Score                            
                           
DK DK001IO/54 041 ศักยภาพของพนักงานส่วนหน้า ( Frontline) ไม่เป็นไปตามเป้าหมายที่กำหนด O 5 X 5 25 5 X 5 25 4 X 4 16 4 X 4 16 4 X 4 16 4 X 4 16 4 X 4 16 3 X 5 15


โดย:  Sudarat2536 IP: 110.77.229.xxx วันที่: 19-05-2015 เวลา: 14:01:26
 ความคิดเห็นที่ 12
กลายเป็นเอาค่าไปแสดงทุกบันทัดเลยค่ะ ผลมันเรียงไปทางขวามือเเทนที่จะเรียงลงมาค่ะ 

DZDD024IO/54 5 5 NULL NULL 5 5 25
DZDD027IO/54 5 5 NULL NULL 5 5 25
DRDN003IO/54 4 4 4 4 4 4 16
DC004IS/54 4 4 4 4 4 4 16
DZDD030IO/54 5 5 4 4 4 4 16
DZDD019IS/54 2 3 4 4 4 4 16
VZDY001IO/54 4 4 4 4 4 4 16
DZDD002IO/54 5 3 NULL NULL 3 5 15
DC001IF/54 3 4 3 4 4 3 12
ZADD002EO/54 4 3 4 3 3 4 12
E9DE001IO/54 4 3 4 3 3 4 12
DZDD017IO/54 5 2 4 3 3 4 12
DZDD003IO/54 5 3 3 4 4 3 12
VZDY003IF/54 5 2 NULL NULL 2 5 10
DJDD001EC/54 2 5 2 5 5 2 10
DJDD004IO/54 2 5 2 5 5 2 10
DZDD021IS/54 3 2 3 3 3 3 9
ZADD006IO/54 2 4 3 3 3 3 9
DZDD010IS/54 5 3 3 3 3 3 9
ZADD007IO/54 3 3 3 3 3 3 9
DZDD026IO/54 3 4 3 3 3 3 9
DRDN001IO/54 3 3 3 3 3 3 9
DK001IO/54 5 5 3 3 3 3 9
DJDD005IO/54 4 4 3 3 3 3 9
DK002IO/54 3 3 3 3 3 3 9
DK003IO/54 3 3 3 3 3 3 9
D2001IO/54 4 2 4 2 2 4 8
DIDB001IO/54 3 3 2 4 4 2 8
DFDE007IO/54 2 4 4 2 2 4 8
D3DD001EO/54 4 4 4 2 2 4 8

อันนี้เอาไปtest ใน ดาต้าเบสถูกต้องทุกอย่างเลยค่ะ แต่พอเอามาขึ้น excel ทำไมถึงไม่เรียง T^T

โดย:  Sudarat2536 IP: 118.174.187.xxx วันที่: 19-05-2015 เวลา: 13:59:38
 ความคิดเห็นที่ 11
...

โดย:  Sudarat2536 IP: 110.77.229.xxx วันที่: 19-05-2015 เวลา: 13:35:00
 ความคิดเห็นที่ 10
ขอบคุณมากค่ะ เดี๋ยวทำดูก่อนค่ะ 

โดย:  Sudarat2536 IP: 110.77.229.xxx วันที่: 19-05-2015 เวลา: 09:28:46
 ความคิดเห็นที่ 9
แสดงว่าไปดึงข้อมูลทีละตาราง ไม่ได้ใช้ การดึงแบบ join table หรือดึงพร้อมกันสองตาราง
ตามที่เคยแนะนนำ 

http://www.ninenik.com/forum_view_1519_1.html



รูปแบบคำสั่ง sql เดียว แต่ดึงจาก 2 ตาราง

SELECT   
a.*,b.*,  
IF(ISNULL(b.impactlevel),a.impactlevel,b.impactlevel) as impactlevel,
IF(ISNULL(b.problevel),a.problevel,b.problevel) as problevel,
IF(ISNULL(b.impactlevel) AND ISNULL(b.problevel),a.impactlevel*a.problevel,b.impactlevel*b.problevel) 
as riskscore  
FROM risk_master a   
LEFT JOIN risk_supervise b  
ON a.riskno=b.riskno   
ORDER BY  riskscore DESC 


เอาคำสั่งนี้ไว้ข้างนอกสุด ไม่ต้อง query ซ้อนอีกข้างใน ตัวอย่างการใช้

<?php
$strSQL="SELECT   
a.*,b.*,  
IF(ISNULL(b.impactlevel),a.impactlevel,b.impactlevel) as impactlevel,
IF(ISNULL(b.problevel),a.problevel,b.problevel) as problevel,
IF(ISNULL(b.impactlevel) AND ISNULL(b.problevel),a.impactlevel*a.problevel,b.impactlevel*b.problevel) 
as riskscore  
FROM risk_master a   
LEFT JOIN risk_supervise b  
ON a.riskno=b.riskno   
ORDER BY  riskscore DESC ";  
$dbquery = mysql_query($strSQL, $link);  
while($rs=mysql_fetch_array($dbquery)){
	$worksheet->write($row,$col++,stripslashes($rs[impactlevel]).' X '.($rs[problevel]),$detail2);  
	$worksheet->write($row,$col++,stripslashes($rs[riskscore]),$detail2);  	
}
?>


>>>  อัพเดท >>> 18-05-2015
------------------------------------------
a.* 
ฟิลด์ของตาราง a หรือก็คือ ตาราง risk_master ทั้งหมดมาแสดง

b.* 
ฟิลด์ของตาราง b หรือก็คือ ตาราง risk_supervise ทั้งหมดมาแสดง

IF(ISNULL(b.impactlevel),a.impactlevel,b.impactlevel) as impactlevel,  
เนื่องจาก ตาราง a และ b มีการใช้ชื่อฟิลด์เหมือนกัน เราจำเป็นต้องกำหนดชื่ออ้างอิงฟิลด์ใหม่
ถ้าฟิลด์ impactlevel ของตาราง b เป้น NULL ให้ใช้ค่าของตาราง a ถ้าไม่ใช่ ให้ใช้ค่าของตาราง b 

IF(ISNULL(b.problevel),a.problevel,b.problevel) as problevel,  
เนื่องจาก ตาราง a และ b มีการใช้ชื่อฟิลด์เหมือนกัน เราจำเป็นต้องกำหนดชื่ออ้างอิงฟิลด์ใหม่
ถ้าฟิลด์ problevel ของตาราง b เป้น NULL ให้ใช้ค่าของตาราง a ถ้าไม่ใช่ ให้ใช้ค่าของตาราง b 

IF(ISNULL(b.impactlevel) AND ISNULL(b.problevel),a.impactlevel*a.problevel,b.impactlevel*b.problevel)   
as riskscore    
ถ้าฟิลด์ impactlevel และ problevel ของตาราง b เป็นค่า NULL ให้ใช้ค่าของ impactlevel และ problevel
ของราตาง a คูณกันแล้วกำหนดไว้ในชื่อ riskscore  แต่ถ้าไม่ใช่ ให้ใช้ค่าของ impactlevel และ problevel
ของราตาง b คูณกันแทน


โดย:  Ninenik IP: 180.183.9.xxx วันที่: 18-05-2015
 ความคิดเห็นที่ 8
ตริงๆแล้วใช้ได้เลยค่ะ แต่ทีนี้ผล riskscore มันมีตัวที่เอามาจาก risk_supervise ด้วย ทีนี้มันเลยเหมือนไม่เรียงตาม riskscore ค่ะ เพราะ ค่าที่เอามาเเสดงจริง มันมีมาจากสองตาราง 'งงมั๊ยคะ  พอจะมีวิธีการเรียงข้อมูลที่เอามาออกรายงานโดยไม่ใช้การ select ข้อมูลบ้างมั๊ยคะ  

โดย:  Sudarat2536 IP: 110.77.229.xxx วันที่: 18-05-2015 เวลา: 14:33:06
 ความคิดเห็นที่ 7
ใช้ตัวที่เป็น riskscore ได้เลย เช่น

SELECT *,data1*data2 as data_total  FROM tbl_a ORDER BY data_total DESC


data_total ก็เหมือนเป็นฟิลด์ที่ถูกสร้างมาแสดงชั่วคราว เราสามารถจัดเรียงจากชื่อนี้ได้เลย

โดย:  Ninenik IP: 180.183.9.xxx วันที่: 18-05-2015
 ความคิดเห็นที่ 6
คือว่า ผลมันจะออกมาเป็น report มันก็จะมี data ในส่วนของ risk_master และ risk_supervise อยู่ในอันเดียวกันเลยสงสัยค่ะว่าเวลาจะให้แสดงโดยเรียงค่า riskscore ซึ่งได้จาก problevel*impactlevel ของเเต่ละอันมา จะต้อง order by ตรงไหนค่ะ 

โดย:  Sudarat2536 IP: 118.174.64.xxx วันที่: 18-05-2015 เวลา: 13:48:32
 ความคิดเห็นที่ 5
ORDER BY รูปแบบก็ถูกแล้วไม่ใช่หรอ 

โดย:  Ninenik IP: 180.183.9.xxx วันที่: 18-05-2015
 ความคิดเห็นที่ 4
ไม่ error แล้วค่ะ เหลือ แต่ว่าจะ order by riskscore ยังไง 5555 

โดย:  Sudarat2536 IP: 118.174.64.xxx วันที่: 18-05-2015 เวลา: 13:30:43
 ความคิดเห็นที่ 3
ขึ้นว่า 

โดย:  Ninenik IP: 180.183.9.xxx วันที่: 18-05-2015
 ความคิดเห็นที่ 2
ขึ้น error ค่ะ 	ที่บันทัดนี้เลยค่ะ $numrisk=mysql_num_rows($dbqueryI2);



$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);


โดย:  Sudarat2536 IP: 110.77.229.xxx วันที่: 18-05-2015 เวลา: 11:37:54
 ความคิดเห็นที่ 1
ลองใช้ IS NOT NULL ดู เข่น

WHERE abc IS NOT NULL


โดย:  Ninenik IP: 180.183.9.xxx วันที่: 18-05-2015