ถามเทคนิควิธีการแก้ไข ข้อมูล แบบ master-detail ครับ

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

ถามเทคนิควิธีการแก้ไข ข้อมูล แบบ master-detail ครับ

 ผมมีการบันทึกข้อมูลแบบ master-detail ของ เอกสารครับ

tb_document
-doc_id
-doc_name
-doc_date

tb_document_category
-category_id
-doc_id
-category_name

ตามตัวอย่าง 1 document จะมีได้หลาย category ครับ

ที่ผมอยากทำคือ ในเรื่องการแก้ไข category ของ doc_id นั้นๆ

สมมุติว่า doc_id = 1 มี category_id คือ 1 , 2 , 4 ตามลำดับ
ผมต้องการแก้ เป็น ให้มี 1 , 2 , 3 , 5

โดยลักษณะตรง category ผมได้ทำเป็น checkbox ให้เลือกไว้ (ตอนเรียกดูข้อมูลก่อนแก้ไข ถ้าอันไหนมีอยุ่ ก็จะถูกติ๊กไว้)

จากตัวอย่างข้างบน ก่อนแก้ไข ข้อมูลเดิม จะถูกติ๊กไว้ที่ 1 , 2 และ 4
พอแก้ไขไปใหม่ เปลี่ยนไปติ๊กที่ 1 , 2 , 3 , 5 
ตอนบันทึกข้อมูลผมจะบันทึกอย่างไรดีครับ

จะเช็คได้อย่างไรว่า ถ้า อันใหม่ที่ติ๊กไว้ เหมือนกับอันเก่าที่มีอยู่ ก็ไม่ต้องแก้ไขเปลี่ยนแปลงอะไร
แต่ถ้า อันใหม่ที่ส่งค่ามา เมื่อเช็คแล้ว อันเก่าไม่มีอยู่ ก็ให้  insert เพิ่มไป
ส่วนถ้า อันใหม่ ไม่มี แต่อันเก่ามี ให้ delete อันเก่าทิ้ง

จากตัวอย่าง สรุปแล้ว 1 กับ 2 นั้น ตรวจพบว่า ของเดิมมี ก็ไม่้ต้องทำอะไร
ส่วน 3 และ 5 นั้น ของเดิมไม่มี ก็ insert เพิ่ม  และ 4 ของเดิมมี แต่ของใหม่ ไม่มี ให้ delete 4 ทิ้ง

 

ผมคิดวิธีนึงออกครับ คือ ให้ทำการ delete category ของ doc_id = ที่ต้องการ ทิ้งหมดเลย แ้ล้ว insert เข้าไปใหม่หมด
วิธีนี้ง่ายดี แต่ว่า ผมมองถึงปัญหา เรื่อง ถ้าเกิดมีการแก้ไขบ่อยๆ มันจะทำให้ ลบข้อมูล เรื่อยเปื่อย แล้วตัวเลข autonum มันจะ run เพิ่มขึ้นไปเรื่อยๆรึเปล่า

เลยไม่ค่อยอยากใช้วิธีนี้เท่าไรครับ

 

 



Likito 22-11-2010 14:31:42

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

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


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


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

 ความคิดเห็นที่ 1

 คำถามนี้เป็น idea ดีมากเลย ปกติก็เจอเหมือนกัน แต่ไม่ค่อยได้ทำเป็นรูปแบบไว้ ปกติก็จะแก้ปัญหาตรงนั้นเลย

 
แต่ถ้าจะให้อธิบายวิธีการ คงจะอธิบายไม่ถูก ลองเอาโค้ดไปทดสอบรันดู

 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>

<body>
<?php
//  $i คือหมวด category_id
// ในตัวอย่างเป็นเพียงแนวทาง กำหนดแบบตายตัว เอาไปใช้จริง ให้ปรับตามฐานข้อมูล
?>
<form id="form1" name="form1" method="post" action="">
<?php for($i=1;$i<=5;$i++){ ?>
  <input name="chk<?=$i?>" type="checkbox" id="chk<?=$i?>" <?=($i==1 || $i==2 || $i==4)?"checked":""?> 
  value="1" /><?=$i?><br />
  <input name="h_checkbox[<?=$i?>]" type="hidden" id="h_checkbox[]"  value="<?=($i==1 || $i==2 || $i==4)?$i:"0"?>" />
<?php } ?>
  
  <br />
  <input type="submit" name="button" id="button" value="Submit" />
</form>
<pre>
<?php print_r($_POST); ?>
<?php
if(count($_POST['h_checkbox'])>0){
	foreach($_POST['h_checkbox'] as $key=>$value){
		if($value==0){
			if(isset($_POST['chk'.$key])){
				echo $key." ADD<br>";
			}
		}else{
			if(!isset($_POST['chk'.$key])){
				echo $key." REMOVE<br>";
			}			
		}
	}
}
?>
</pre>
</body>
</html>


Ninenik 22-11-2010
 ความคิดเห็นที่ 2

 ขอบคุณครับ



likito 23-11-2010 09:30






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