ด้วยสํานึกในพระมหากรุณาธิคุณสมเด็จพระนางเจ้าสิริกิติ์เป็นล้นพ้นอันหาที่สุดมิได้
ด้วยสํานึกในพระมหากรุณาธิคุณสมเด็จพระนางเจ้าสิริกิติ์เป็นล้นพ้นอันหาที่สุดมิได้


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

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

ปัจจุบัน นักพัฒนาสามารถ ใช้ ChatGPT | Gemini | Claude | Perplexity | Deepseek ช่วยในการแก้ไขปัญหาต่างๆ ในการเขียนโปรแกรม หรือหาข้อมูลเพิ่มเติมได้ง่ายและสะดวก แนะนำให้ทุกคนใช้งานเพื่อพัฒนาศักยภาพของตัวเอง

รบกวนสอบถามการตัดค่า 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 18-05-2015 10:58:37

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

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


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


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

 ความคิดเห็นที่ 1
ลองใช้ IS NOT NULL ดู เข่น

WHERE abc IS NOT NULL


ninenik 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 18-05-2015 11:37
 ความคิดเห็นที่ 3
ขึ้นว่า 


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


sudarat2536 18-05-2015 13:30
 ความคิดเห็นที่ 5
ORDER BY รูปแบบก็ถูกแล้วไม่ใช่หรอ 


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


sudarat2536 18-05-2015 13:48
 ความคิดเห็นที่ 7
ใช้ตัวที่เป็น riskscore ได้เลย เช่น

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


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


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


sudarat2536 18-05-2015 14:33
 ความคิดเห็นที่ 9
แสดงว่าไปดึงข้อมูลทีละตาราง ไม่ได้ใช้ การดึงแบบ join table หรือดึงพร้อมกันสองตาราง
ตามที่เคยแนะนนำ 

https://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 18-05-2015
 ความคิดเห็นที่ 10
ขอบคุณมากค่ะ เดี๋ยวทำดูก่อนค่ะ 


sudarat2536 19-05-2015 09:28
1 2 Next






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