A-AA+then

หัดเขียนโค้ดเล่น โดยใช้วิชามึน

634

ผมขอทราบวิธีคิดหน่อยครับ คือผมมีปัญหาดังนี้
ฐานข้อมูลชื่อ company มีตารางอยู่ 3 ตาราง

ตารางที่ 1 ชื่อ ตาราง staff มีคีย์หลักเป็น staff_id ซึ่ง ID จะเป็นประมาณนี้ N8Q6bz1hT ไว้เก็บข้อมูลพนักงาน
เช่น ชื่อ นามสกุล ค่าแรงต่อวัน

ตารางที่ 2 ชื่อ ตาราง staff_day_work มีคีย์หลักเป็น report_id
มี field ชื่อ report_id staff_name
ไว้เก็บชื่อของพนักงานที่ทำงานในวันนั้น สมมุติว่าพนักงานทำงานรายวัน วันไหนไม่ทำงานก็คือไม่มีการจ่ายเงิน

ตารางที่ 3 ชื่อ ตาราง dayli_report มีคีย์หลักเป็น report_id
ตารางนี้ไว้เก็บรายการต่างๆ ที่เกิดขึ้น เช่น รายจ่ายค่ารถ จ่ายค่ากับข้าว
อยากให้ข้อมูลในตารางนี้สัมพันธ์กับ staff_day_work กล่าวคือในหนึ่งวันต้องมีคนทำงานมากกว่า 1 คน
จึงได้แยกชื่อพนักงานไว้ในอีกตาราง

คราวนี้มาถึงฟอร์มบันทึกข้อมูล ก่อนที่จะโหลดฟอร์มขึ้นมา ผมได้ทำการ query ข้อมูล 1 ครั้งเพื่อที่จะเอาข้อมูลจากตาราง
Staff ออกมาโดยดึงเอาชื่อของพนักงานออกมา ในฟอร์มนั้นสิ่งที่จะมีค่าเดียวเช่น ชื่อผู้บันทึก วันที่บันทึก ค่ารถ ค่ากับข้าว
เหล่านี้มันมีค่าเดียวผมเลยเอามันไว้นอก foreach ผมใช้ foreach loop เอาค่า staff_id staff_name
ไว้ใน checkbox
foreach($all_staff->result() as $row){
        ?>
        <input type='checkbox' name='staff_name[]'
        value='<?php echo $row->staff_name; ?>
' >
        <?php echo $row->staff_name;
        //ในฟอร์มมี checkbox และส่งชื่อพนักงานออกมาเฉพาะ checkbox ที่ถูกเลือก ?>
        <?php
}

ผมเอาข้อมูล บันทึกในตาราง dayli_report
ส่วน staff_day_work นั้นต้องการชื่อพนักงานและ id ของวันที่บันทึก
ผมไม่มีปัญหาในขั้นตอนนี้ แต่.....ถ้าสมมุติว่าผมผิดพลาด หมายถึงว่า พนักงานที่มีชื่อในตาราง staff_day_work ในวันนั้น
เค้าไม่ได้มาทำงาน แต่คนที่เค้ามา ผมไม่ได้คลิกเลือกไว้ งานเข้าสิครับผมต้องแก้ไขข้อมูลใหม่
โดย query เอาชื่อพนักงานจากตาราง staff , staff_day_work,dayli_report ออกมาเข้าในฟอร์มเพื่อแก้ไข
ถึงที่ตายแล้วครับ ผมจะเอา checkbox ออกมาได้ยังไงโดยที่ชื่อที่เลือกไว้ก่อนหน้ายังอยู่ และผมสามารถแก้ไขข้อมูลใหม่ได้

ผมใช้ codeigniter ครับ สิ่งที่ผมต้องการก็คือ
ผมสามารถเก็บข้อมูลการทำงานประจำวันและรายจ่ายของพนักงานได้ โดยชื่อพนักงานนั้นต้องมาจากฐานข้อมูล
และเก็บชื่อพนักงานที่มาทำงานในวันนั้นๆ ส่วนคนที่ไม่มาทำงาน จะต้องไม่มีชื่อในวันนั้นๆ และสามารถเรียกออกมาแก้ไขได้
ขอแนวคิดด้วยครับ ว่าถ้าผมอยากได้แบบนี้ผมจะต้องออกแบบฐานข้อมูลยังไง

1 ความคิดเห็น

วิธีคิก็ถูกแล้วครับ แนะนำเพิ่มเติมว่า staff_id (key ทั้งหลาย) ควรเป็นตัวเลข เพราะมันเร็วที่สุด และจดจำง่าย (ในสายตามนุษย์ หากต้องการกวาดตาดูข้อมูล)

ส่วนแนวคิดการแก้ปัญหา ผมแนะนำแบบนี้

ปกติแล้วเราสามารถ query ข้อมูลออกมาเป็นรายวันได้ (ถ้าไม่มีก็คงต้องมีในหน้านี้) เช่นเพื่อดูว่าในวันนี้ มีใครมาทำงานบ้างและในเวลาเท่าไร เราก็สามารถใช้หน้านี้แหละครับในการตรวจสอบความถูกต้องหรือเพื่อแก้ไขข้อมูลได้ โดย ให้แสดงรายชื่อทั้งหมด (แทนที่แสดงเฉพาะ ข้อมูลคนที่มา) โดยอาจใช้ checkbox แทนคนที่มา (ขีดถูกหมายถึงมา) ทำให้เราสามารถตรวจสอบความถูกต้องของข้อมูลรายวันในหน้านี้ได้เลยครับ และ อาจรวมถึงอาจยอมให้มีการแก้ไขเวลาในหน้านี้ได้ด้วย

หมายเหตุ หน้านี้ควรเข้าถึงได้โดยผู้มีอำน่าจเท่านั้น และ แยกออกจากหน้ารายงาน เพื่อความสะดวกในการดู
1
^