Tags:

ผมมีตารางข้อมูลของข้อมูลวิชาเลือกนักเรียน ซึ่งแต่ละเทอมมี 3 วิชา

No Description

ปัญหามีมีอยู่ว่าเวลาผมจะค้นหาข้อมูลนักเรียนที่มีวิชาเลือกเนี่ย ผมต้องทำแบบนี้

SELECT * FROM subject_member WHERE member_now_1=(รหุัสวิชา) OR member_now_2=(รหุัสวิชา) OR member_now_3=(รหุัสวิชา);

ผมคิดว่าถ้าเขียนแบบนี้ มันจะไม่ค่อยเป็น dynamic สักเท่าไหร่นะครับ

ผมอยากทราบว่า ระหว่าง

  1. ใช้ php ตรวจสอบว่าตารางที่ขึ้นต้นด้วย member_now มีกี่ช่อง แล้วใช้ for ลูปแล้วเขียน OR เพิ่มไปเรื่อยๆ กับ
  2. ยุบ member_now ให้มีคอลัมน์เดียว เปลี่ยนเป็น varchar ขนาด 12 แล้วค้นหาด้วยการ

    WHERE member_now LIKE %(รหุัสวิชา)%;

    แต่ผมกังวลว่ามันจะมีผลต่อความเร็วในการ query ข้อมูลออกมา และไม่สะดวกเวลาค้นหาเป็นสายชั้นด้วย

หรือถ้ามีวิธีอื่นที่น่าสนใจก็เสนอกันได้นะครับ

ขอบคุณมากครับ _/\_

Get latest news from Blognone
By: Azadious
iPhoneAndroidWindows
on 9 February 2013 - 10:15 #539063
Azadious's picture

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

By: itpcc
ContributoriPhoneRed HatUbuntu
on 9 February 2013 - 10:57 #539073 Reply to:539063
itpcc's picture

ขอบคุึณสำหรับคำแนะนำครับ

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

ตอนนี้ผมคิดว่าจะแบ่งตารางนี้ออกเป็นสามส่วนคือ

  1. ตารางข้อมูลทั่วไปของสมาชิก
  2. ตารางชื่อผู้ใช้และรหัสผ่าน
  3. ตารางวิชาเลือก(ที่ผมเกิดปัญหามาถามนี่ล่ะครับ)
  4. และอาจมีตารางของกิจกรรมอื่นๆด้วย

แต่ก็มีปัญหาเหมือนที่ผมตั้งคำถามนั่นล่ะครับ

อีกอย่างคือ เคื่องที่ีเป็น db server กับ web server เป็นเครื่องเดียวกัน เลยไม่ได้เแคร์อะไรมากในตอนแรกน่ะครับ -_-"


บล็อกส่วนตัวที่อัพเดตตามอารมณ์และความขยัน :P

By: hiddenmin
AndroidUbuntuWindows
on 9 February 2013 - 15:36 #539150
hiddenmin's picture

แยก member_now_X ออกไปเป็นอีกตารางหนึงครับ

By: Architec
ContributorWindows PhoneAndroidWindows
on 9 February 2013 - 18:49 #539200

normalize เถอะครับ จะได้ไม่เป็นภาระลูกน้อง = = (เหยด)

By: itpcc
ContributoriPhoneRed HatUbuntu
on 9 February 2013 - 20:59 #539225 Reply to:539200
itpcc's picture

เอ่อ... ไม่ได้กวนอะไรนะครับ แต่ normalize หมายถึงอะไรครับ = ="


บล็อกส่วนตัวที่อัพเดตตามอารมณ์และความขยัน :P

By: Architec
ContributorWindows PhoneAndroidWindows
on 9 February 2013 - 22:27 #539258 Reply to:539225
By: itpcc
ContributoriPhoneRed HatUbuntu
on 10 February 2013 - 00:06 #539281 Reply to:539258
itpcc's picture

ขอบคุณครับ

ตอนนี้ผมแยกรหัสวิชาเลือกของแต่ละคนเป็นอีกตารางแล้ว โดยให้มี id ที่สัมพันธ์ แล้วแต่ละฟิลด์ ก็จะเป็น id ของวิชาที่ชี้ไปในตารางรายวิชา ประมาณนี้

No Description

แบบนี้พอจะเป็น normalize ยังครับ?


บล็อกส่วนตัวที่อัพเดตตามอารมณ์และความขยัน :P

By: Architec
ContributorWindows PhoneAndroidWindows
on 10 February 2013 - 09:18 #539334 Reply to:539281

เริ่มต้นได้ดีครับ ยังงงๆกับตาราง member_mcourse อยู่ครับ น่าจะย่อยมาได้อีกครับ ตอนเรียนผมลืมไปเยอะเลย normalize กับแบบลึกซึ้งมาก

By: itpcc
ContributoriPhoneRed HatUbuntu
on 10 February 2013 - 13:36 #539365 Reply to:539334
itpcc's picture

ขอบคุณครับ

คือที่จริงไอ้เจ้า now_x กับ term1_x เนี่ย ผมไว้เก็บ id ของวิชาที่จะเรียนวิชาเลือกน่ะครับ เลือกได้สามวิชาต่อเทอมน่ะครับ


บล็อกส่วนตัวที่อัพเดตตามอารมณ์และความขยัน :P

By: Architec
ContributorWindows PhoneAndroidWindows
on 10 February 2013 - 16:09 #539396 Reply to:539365

น่าจะแยกเป็น ENROLL, SEMESTER ครับ จะได้ใช้ในการเรียกดูย้อนหลังรายภาคการศึกษาและก็จัดการวิชาได้อิสระกว่าครับ

STUDENT -> ENROLL(ลงทะเบียน) <- SUBJECT(วิชา) <- SEMESTER(ภาคการศึกษา) แล้วค่อยเข้ามา SELECT ดูว่าลงทะเบียนไปกี่วิชาแล้วครับ (นอกนั้นคงเป็นแยกตารางของอาจารย์ออกไปครับ)

คือถ้ามันยุ่งๆหรือไม่จำเป็นขนาดนั้นก็ไม่ต้องตามผมก็ได้ครับ ไม่ว่ากัน

By: kowito
Android
on 11 February 2013 - 01:26 #539511 Reply to:539200

พอเจอ data เยอะๆจะร้อง denormalize เถอะครับ จะได้ไม่เป็นภาระลูกหลาน