Database 板


LINE

正规作法: Table student id name 名称 Table class id name date 名称 上课日期 Table class_list id student_id class_id 学生编号 选的课程id 找学生选了哪些课: SELECT * FROM class_list, class WHERE class_id=class.id AND student_id=学生编号 找课程中有哪些学生: SELECT * FROM class_list, student WHERE student_id=student.id AND class_id=课程编号 如果你打算用课程或是学生的名字去找,那还得多关联一张表才行 偏门: Table student id name class_list 名称 ;2;6;8; ↑ 课程表,注意前後都要有分隔符号 Table class id name date student_list 名称 上课日期 ;6;8;9; 课程的学生列表 Table class_list id student_id class_id 学生编号 选的课程id 然後记得在编辑过class_list之後 要去写入student.class_list跟class.student_list栏位 找课程中有哪些学生: SELECT * FROM student WHERE class_list LIKE '%;课程id;%' 找学生选了哪些课: SELECT class_list FROM student WHERE id=学生id 如果要用名称的话,才用正规的方式去关连资料出来 注意:考试或是做学校专题时,记得用正规方法,不然会被当到死 效率这种东西有时候是可以「搬移」的 像那种偏门方法就是「降低写入降低效能,加快读取效能」 如果常常用到名字的话,还可以把id、名称弄成json,存进栏位 但相对的,当资料有变动时就更需要花工夫去修改或是同步 对这种资料库设计不熟的人,去写update的sql说不定还会把资料弄乱..... 总之,如果有下面这些行为的话 依照顺序,尽量避免掉: 1.用程式递回查询 遗憾的是,有些树状结构的资料表无法避免这种状况.... 2.用回圈查询 80%的状况都可以把回圈压缩到 WHERE 的条件中 3.IN (..程式捞资料库黏字串出来的落落长的清单..) 用子查询来做说不定会好一点 总之最好也不要用 简单来讲,就是尽量避免大量下SQL去捞资料的状况。 ※ 引述《xfighter (xfighter)》之铭言: : 最近在做的东西愈到了一些瓶颈, 想请问大家资料库的table该怎麽设计会比较有效率: : case1: : 有n个学生, 有m种课程 : 学生 课程 : 1 1(数学) : 2 2(国文) : 3 . : 4 . : . . : . m : . : n : 应用是要知道每个学生选了哪些课程 : table要怎麽设计, 效率会比较好呢? : 我目前的做法是: : 学生table: : -----student----- : | ID | name | my_lessons | : | 1 | John | 1;3;6 | : | 2 | Jack | 4;5;6 | : | . | . | . | : | . | . | . | : | n | . | . | : 课程table: : ----lession------ : | lesson_ID | lesson_name | : | 1 | 国文 | : | 2 | 数学 | : | . | . | : | . | . | : | m | . | : 要拿到每个学生在上的课程, SQL语法: : $list = student's my_lessons : $result = mysql_query("SELECT * FROM `lesson` WHERE `lesson_ID` IN ($list)"); : 这种多对多的table一但资料库太大, 效率就会很差... : 不知道版上大大们可否给小的一些建议 : case2. : 每一堂课的留言版要怎麽设计会比较有效率呢 : 课程table: : ----lession------ : | lesson_ID | lesson_name | : | 1 | 10/25 国文 | : | 2 | 10/27 数学 | : | . | 10/30 国文 | : | . | . | : | . | . | : 留言内容table: : ----message------ : | message_ID | lesson_ID | message | : | 1 | 1 | 今天国文好难 | : | 2 | 1 | 国文真是我的罩门 | : | 3 | 2 | 我喜欢数学 | : | . | . | . | : | . | . | . | : 要拿到每堂课程的留言, SQL语法: : $lession_ID = lession's lesson_ID : mysql_query("SELECT * FROM `message` WHERE `lesson_ID` = '$lession_ID'"); : 然後每堂课都要执行一次..去捞所有的message table : 这样会不会太暴力? 谢谢..^^ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.117.36.3







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP