Re: [請益] 推甄選填系統

看板PHP作者 (寶貝豬)時間17年前 (2009/02/03 18:12), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
1. 所有學生都集中在一個資料表就好. 因為以'班級'做'分群'是可以在有必要 時再透過SQL查詢得到的. 但若一開始就依班級分資料表存放學生記錄的的話 , 等於一開始就寫死了, 不管是後續的要維護資料的完整性或是要做合併查 詢都相當麻煩.照理說, 這種依班級分資料表的想法根本就不該列入考慮. 2. 可以寫程式列舉所有校系, 並針對每一個校系所關聯到的學生志願的分數由高 而低予以排序. 再限定前三筆記錄即可. 這樣的需求可以透過四個表的關聯設計(已將正規化考慮進去)來達到: 1.學生, 2.班級, 3.校系, 以及4.志願(學生選校系的記錄): 學生: id, 學號(帳號), 密碼, 姓名, class_id(所屬班級的外鍵) 班級: id, 班級, 所屬組別(甲組/乙組/丙組) 校系: id, 學校, 系名, 最低錄取分數, 名額 志願: id(可有可無), user_id, target_id(所選校系的外鍵), 志願順序, 推薦分數, 是否錄取 1個學生只能屬於1個班級; 1個班級可以包括 n 個學生; 1個學生可以填寫 n 筆志願; 1個校系可以包含 n 筆志願; 1筆志願只能同時屬於1個學生及1個校系. 四個表之間的關聯如下: +-n-1->學生-n-1->班級 志願--+ +-n-1->校系 如何查詢一個校系當中所錄取志願之最高分數的前三名學生? 以php+MySQL為例: function top3list($target_id){ $link=mysqlConn(); //mysqlConn()是客製函式, 把例行資料庫連線作業做掉; $sql=" select 學生.* from 志願 left join 學生 on 志願.user_id=學生.id where 志願.target_id=$target_id order by 志願.推薦分數 desc limit 0,3; "; $top3=array(); $rs=mysql_query($sql,$link); while($r=mysql_fetch_assoc($rs)) $top3[]=$r; return $top3; } 在寫程式時, 可以把上述已包成一個函式的SQL重複使用. 若要 針對所有校系做同樣的事情, 只要再寫另一個SQL列舉所有的校 系的id, 然後再一個個丟進去上述的SQL函式查詢即可. $link=mysqlConn(); $sql=" select id from 校系 order by 你要的排序條件; "; $rs=mysql_query($sql,$link); $all_target=array(); while($r=mysql_fetch_assoc($rs)) $all_target[$r['id']]=top3list($r['id']); //以上. all_target即是所得. 至於在視覺上如何將資料予以報表 形式呈現那又是另一道工序了. 對於各種不同需求的查詢, 都可以仿照上述的樣板下去套. 上述程式碼主要是示意用, 僅供參考. 實際上並不能run. XD ※ 引述《Parati (好。難。過)》之銘言: : 想請問一下版上的高手 : 如果想設計一個像http://ce.pymhs.tyc.edu.tw/的志願選填系統 : 不知各位的MySQL資料表欄位會如何設計 : 如果設一個Class1的資料表來儲存使用者選填資訊 欄位如下 : ========== ==== ====== ======== ====== ======== ====== ======= : 使用者帳號 密碼 志願一 推薦分數 志願二 推薦分數 志願三 推薦分數 : 有好幾個班的話 那資料庫是分成Class1、Class2等資料表還是都寫在同一個沒關係 : 會這樣問是原因是當要查詢結果的時候 如以下網址 : http://ce.pymhs.tyc.edu.tw/class.show_recommendation_list.php : 要怎麼找出同一校系分數最高的前三個名額? : 校系那麼多 不可能每一行不同的校系都寫query吧 = = : 想請教一下版上的高手的問題~ : 問題1.依照各位高手的經驗,規劃資料庫時是一班設一個資料表(日後管理較一目了然) : 還是所有班級的學生都集中在一個資料表就好了 : 還是說都沒差 : (想說先規劃好對之後查詢比較的功能會比較好寫) : 問題2.就是那個查詢功能要怎麼找出同一校系分數最高的前三個名額? : (如果是存成一班一個資料表等 那麼多資料表要抓出來比較~PHP要怎麼寫呀?) : 以前只是玩小小的留言板 : 第一次嘗試看看那麼大的系統 所以有很多問題請教 : 原po只是沒經驗的新手 希望藉助版友的技術與經驗~非常感謝~ : 不好意思~把問題重新打的比較清楚一點 : 花費時間來看這篇 感激不盡 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.74.193.210 ※ 編輯: bobju 來自: 211.74.193.210 (02/03 18:13) ※ 編輯: bobju 來自: 211.74.193.210 (02/03 18:21)

02/03 20:22, , 1F
感謝bobju大 因為php是自學的 觀念不清楚
02/03 20:22, 1F

02/03 20:23, , 2F
花費你那麼多時間回文 受益良多 非常感謝~~
02/03 20:23, 2F
文章代碼(AID): #19Y1YIfG (PHP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #19Y1YIfG (PHP)