บันทึกเวลามาเรียน

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

บันทึกเวลามาเรียน
สวัดดีครับ
ผมได้ทำโปรเเกรมบันทึกเวลามาโรงเรียนมาระยะหนึ่ง ก้พอใช้ได้
ติดปัญหาตรงทีไม่สามารถเเสดงผลนักเรียนที่ขาด เนื่องจากไม่ได้สเเกนเข้า
โครงสร้างโปรเเกรม คร่าวๆ คือ
ผมได้สร้างตารางฐานข้อมูลสองตาราง
ตารางเเรกเก็บข้อมูลนักเรียน
ตารางที่สองรับข้อมูลนักเรียนสเเกน รายวัน มีสามคอลัมน์  คอลัมน์รหัสนักเรียนเพื่อ join กับตารางเเรก , คอลัมน์เก็บวันที่สเเกนเเละ คอลัมน์เวลาสเเกน
ก้สามารถสรุปนักเรียนที่มาได้ รายวัน เเละรายเดือน รายบุคลล ไม่มีปัญหา
สำหรับนักเรียนที่ขาดไม่สามารถสรุปได้ ( ไม่มากี่คน เเละใครบ้างที่ไม่มา )
ต้องเปิดดูเป็นรายบุคคล ถ้าไม่สเเกนเเสดงว่าไม่มา
ไม่ทราบว่าต้องทำยังไงถึงจะได้ผลลับตามที่ต้องการ
รบกวนเเค่นี้ครับ
ขอบพระคุณอย่างสูง


Azhary Pk 09-09-2016 22:32:21

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

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


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


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

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


ninenik 10-09-2016
 ความคิดเห็นที่ 2
ได้เเล้วครับ โค้ดประมานนี้ครับ  เเต่ติดอีกหน่อยตรง where

 <?
           
  $strSQL = "SELECT student.StudentID,student.RFID,student.Nama,student.Nisbah,HudurS_Dn.NoID,HudurS_Dn.RFID,HudurS_Dn.Date,HudurS_Dn.Time,HudurS_Dn.Late
                      FROM student LEFT JOIN HudurS_Dn                          
                      ON student.RFID=HudurS_Dn.RFID
                          WHERE Date = curdate() ต้องการบวกอีก 12  ชั่วโมง เพื่อให้ตรงกับเวลาในประเทศไทย ( เช่า hosgator us )  เเละเงื่อนไขที่สองคือ HudurS_Dn.RFID = ว่าง เพราะต้องการเฉพาะนักเรียนที่ไม่มาวันนี้
                          ORDER BY NoID DESC LIMIT 0,15";
         
    $objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");


?>

ขอบคุณอีกครั้งครับ


Azhary Pk 10-09-2016 10:26
 ความคิดเห็นที่ 3
WHERE Date = curdate() ต้องการบวกอีก 12  ชั่วโมง เพื่อให้ตรงกับเวลาในประเทศไทย ( เช่า hosgator us )  เเละเงื่อนไขที่สองคือ HudurS_Dn.RFID = ว่าง ( หมายถึงไม่มีข้อมูลสเเกนในตารางที่สองเนื่องจากไม่ได้สเเกน ) เพราะต้องการเฉพาะนักเรียนที่ไม่มาวันนี้


Azhary Pk 10-09-2016 10:53
 ความคิดเห็นที่ 4
ใช้ date_add ในคำสั่ง sql ดู ประมาณเนื้อหานี้

เทคนิค วิธี การแสดงข้อมูล ด้วยเงื่อนไข วันที่ date ใน mysql  
https://www.ninenik.com/content.php?arti_id=392 via @ninenik

การเพิ่มเวลาในวันที่ของ คำสั่ง sql จากวันที่ปัจจุบัน ให้ใช้  NOW() แทน
NOW() คือ วันที่และเวลา 0000-00-00 00:00:00 
ส่วน CURDATE() คือวันที่อย่างเดียว ดังนั้น ค่าจึงไม่ใช่วันที่และเวลาในขนะนั้น จะเป็น สมมติ 2016-09-10 00:00:00 แทน

ลองเอาคำสั่งนี้ไปดูเป็นแนวทาง

SELECT NOW( ) , CURDATE( ) , DATE_ADD( CURDATE( ) , INTERVAL 0.5 
DAY ) , DATE_FORMAT( DATE_ADD( NOW( ) , INTERVAL 12 HOUR ) ,  '%Y-%d-%m %H:%i:%s' )

ดังนั้นเวลาไปใช้ ถ้าเทียบแค่วันที่ ให้ใช้เป็น

Date = DATE_FORMAT( DATE_ADD( NOW( ) , INTERVAL 12 HOUR ) ,  '%Y-%d-%m' )



ส่วนเงื่อนไขอื่นเพิ่มเติม ต้องทำความเข้าใจและกำหนดเอง


 


ninenik 10-09-2016
 ความคิดเห็นที่ 5
รบกวนอีกหน่อยครับ
 
ผมได้สร้างตารางไว้สองตาราง
ตารางที่1  เก็บข้อมูลนักเรียน
 

 
ตารางที่2บันทึกการสเเกนของนักเรียนรายวัน
 

 
สิ่งที่ต้องการคื่อ
นักเรียนที่ไม่มาสเเกนวันที่ 9/9/2016กี่คน เเละใครบ้าง
นักเรียนที่ไม่มาสเเกนวันที่ 10/9/2016กี่คน เเละใครบ้าง ประมาณนี้ครับ
 
ต้องใช้สูตรยังไงครับ มึนตึบจังเลย
 
จากการใช้ join ทั้งสองรูปแบบได้ประมาณนี้ครับ
 

 
inner join จะได้ข้อมูลนักเรียนที่สเเกน
 

 
left join ก้จะได้ข้อมูลทั้งหมด ที่สเเกนเเละไม่สเเกน
รวบกวนด้วยครับ ขอบพระคุณอย่างสูง


Azhary Pk 11-09-2016 18:20
 ความคิดเห็นที่ 6
ใช้ข้อมูลจากการ join ตามตารางรูปสุดท้าย แล้วใช้ array เก็บค่า แต่การคิวรี่ต้องให้คิวรีเลือกแสดงเป็นวันๆ 
คือแสดงข้อมูลรายวัน มี where วันที่แสกน= วันที่ที่เราต้องการ จะทำให้ได้ข้อมูลเฉพาะวันที่นั้นๆ
แล้วใช้โค้ดนี้เป็นแนวทางในการหาจำนวนค้นที่ไม่ได้แสกน หรือแสกน

<?php

$arr_std_sc=array();  // อาแรย์เก็บคนที่แสกนในวันนั้นๆ
$arr_std_nosc=array(); // อาแรย์เก็บคนที่ไม่ได้แสกนในวันนั้นๆ
while($row=$result->fetch_array()){ // ลูปแสดงข้อมูลในตาราง
	if($row['ฟิลด์วินที่แสกน']==NULL || $row['ฟิลด์วินที่แสกน']==""){ // ถัาไม่ได้แสกน
		$arr_std_nosc[$row['ฟิลด์ไอดีนักเรียน']]=$row['ฟิลด์ชื่อนักเรียน'];
	}else{ // ถ้าแสกน
		$arr_std_sc[$row['ฟิลด์ไอดีนักเรียน']]=$row['ฟิลด์ชื่อนักเรียน'];
	}
}


// จำนวนคนที่ไม่ได้แสกนในวันนั้น
if($arr_std_nosc && count($arr_std_sc)>0){
	echo count($arr_std_sc);
	//  มีใครบ้าง ให้วนลูป
	foreach($arr_std_nosc as $id_std=>$name_std){
		echo $name_std."<br>";	
	}
}
// จำนวนคนที่แสกนทำเหมือนกัน
if($arr_std_sc && count($arr_std_sc)>0){
	echo count($arr_std_sc);
	//  มีใครบ้าง ให้วนลูป
	foreach($arr_std_sc as $id_std=>$name_std){
		echo $name_std."<br>";	
	}
}
?>


ninenik 11-09-2016
 ความคิดเห็นที่ 7
Thank you ตารีมอกาเซะ
จะลองพยายามดูครับ


Azhary Pk 12-09-2016 21:35
1






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