这种功能如何设计合理的数据表? TEACHER (TID,TNAME,。)COURSE(CID,CNAME,)CLASSARRANGE(TID,CID,CDATETIME) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 数据库是mysql的 能否具体点!给个思路也可以! 我试着写了个CREATE TABLE `kecheng` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `年` year(4) NOT NULL, `周in年` tinyint(3) unsigned NOT NULL, `老师名` varchar(10) NOT NULL, `周几上课` enum('周一','周二','周三','周四','周五','周六','周日') DEFAULT NULL, `上课时间` enum('上午','下午','晚上') DEFAULT NULL, `课程名` enum('物理','化学','英语','数学','语文') DEFAULT NULL, PRIMARY KEY (`id`,`周in年`), UNIQUE KEY `a` (`周in年`,`周几上课`,`上课时间`) USING BTREE) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=gbk;mysql> select * from test.kecheng;+----+------+--------+--------+----------+----------+--------+| id | 年 | 周in年 | 老师名 | 周几上课 | 上课时间 | 课程名 |+----+------+--------+--------+----------+----------+--------+| 1 | 2000 | 23 | 张 | 周三 | 下午 | 英语 || 2 | 2000 | 23 | 王 | 周二 | 晚上 | 化学 || 3 | 2000 | 24 | 张 | 周四 | 上午 | 英语 || 4 | 0000 | 23 | 张 | 周四 | 晚上 | 英语 |+----+------+--------+--------+----------+----------+--------+mysql> select 课程名,上课时间,周几上课 from test.kecheng where 周in年='23' and 老师名='张' order by 周几上课;+--------+----------+----------+| 课程名 | 上课时间 | 周几上课 |+--------+----------+----------+| 英语 | 下午 | 周三 || 英语 | 晚上 | 周四 |+--------+----------+----------+ 楼上的很详细,可最后显示界面很难实现我那个图效果....现在需要显示效果如同我那个图 而且操作SQL语句要简洁所以现在不知道该什么设计数据库了 来个绝的,用表名来表示老师和周,如表名zhangsan42",表示张三老师第42周的课程安排,你只需要把表复制一下,就可以新建老师的课程安排,虽然有点那个,但用起来简单啊。CREATE TABLE `kecheng2` ( `老师名` enum('张老师') NOT NULL, `周in年` tinyint(4) NOT NULL, `上课时间` enum('上午','下午','晚上') NOT NULL, `星期日` enum('物理','化学','外语','语文','数学') NOT NULL, `星期一` enum('物理','化学','外语','语文','数学') NOT NULL, `星期二` enum('物理','化学','外语','语文','数学') NOT NULL, `星期三` enum('物理','化学','外语','语文','数学') NOT NULL, `星期四` enum('物理','化学','外语','语文','数学') NOT NULL, `星期五` enum('物理','化学','外语','语文','数学') NOT NULL, `星期六` enum('物理','化学','外语','语文','数学') NOT NULL, UNIQUE KEY `a` (`上课时间`) USING BTREE) ENGINE=MyISAM DEFAULT CHARSET=gbk;mysql> select * from kecheng2;+--------+--------+----------+--------+--------+--------+--------+--------+--------+--------+| 老师名 | 周in年 | 上课时间 | 星期日 | 星期一 | 星期二 | 星期三 | 星期四 | 星期五 | 星期六 |+--------+--------+----------+--------+--------+--------+--------+--------+--------+--------+| 张老师 | 22 | 上午 | 物理 | 物理 | 物理 | 物理 | 物理 | 物理 | 物理 || 张老师 | 22 | 下午 | 外语 | 外语 | 语文 | 语文 | 语文 | 数学 | 数学 || 张老师 | 22 | 晚上 | 语文 | 语文 | 外语 | 语文 | 物理 | 数学 | 外语 |+--------+--------+----------+--------+--------+--------+--------+--------+--------+--------+当然 这样也行CREATE TABLE `kecheng2` ( `老师名` varchar(10) NOT NULL, `周in年` tinyint(4) NOT NULL, `上课时间` enum('上午','下午','晚上') NOT NULL, `星期日` enum('物理','化学','外语','语文','数学') NOT NULL, `星期一` enum('物理','化学','外语','语文','数学') NOT NULL, `星期二` enum('物理','化学','外语','语文','数学') NOT NULL, `星期三` enum('物理','化学','外语','语文','数学') NOT NULL, `星期四` enum('物理','化学','外语','语文','数学') NOT NULL, `星期五` enum('物理','化学','外语','语文','数学') NOT NULL, `星期六` enum('物理','化学','外语','语文','数学') NOT NULL,) ENGINE=MyISAM DEFAULT CHARSET=gbk; 老师ID 课程ID 上下午标志 周(N) 周标志(第N周) 年月日select * from table where 老师ID ='' and 周标志 = '' order by 周(N)再来一个行列转换 教师信息表(ID,NAME,)课程表(ID,NAME)排课表(教师ID,课程ID,时间 )用交叉表形成你要求的格式 12楼,“这样也行” 下面的sql语句就可以所有老师在一张表中,查询时以老师名,或周做关键字即可,而且完全符合你的表的样式。 trim函数求解 mysql cluster 求一个统计点击率的SQL语句! 用powerdesign产生的sql出错! pt-table-checksum工具主机和从机的端口不一样,怎么解决? 查寻语句如何写 请问我这个存储过程会自动回滚吗?还有怎么捕捉错误信息呢? MYsql中如何计算某列除以该列的总和 where、order by、limit 1 混合使用查询很慢的情况 MYSQL 临时变量在IF语句中的写法 关于mysql出错ERROR 1064 (42000) 数据库如果是utf8的编码该如何解决,按字母检索问题
给个思路也可以!
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`年` year(4) NOT NULL,
`周in年` tinyint(3) unsigned NOT NULL,
`老师名` varchar(10) NOT NULL,
`周几上课` enum('周一','周二','周三','周四','周五','周六','周日') DEFAULT NULL,
`上课时间` enum('上午','下午','晚上') DEFAULT NULL,
`课程名` enum('物理','化学','英语','数学','语文') DEFAULT NULL,
PRIMARY KEY (`id`,`周in年`),
UNIQUE KEY `a` (`周in年`,`周几上课`,`上课时间`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=gbk;mysql> select * from test.kecheng;
+----+------+--------+--------+----------+----------+--------+
| id | 年 | 周in年 | 老师名 | 周几上课 | 上课时间 | 课程名 |
+----+------+--------+--------+----------+----------+--------+
| 1 | 2000 | 23 | 张 | 周三 | 下午 | 英语 |
| 2 | 2000 | 23 | 王 | 周二 | 晚上 | 化学 |
| 3 | 2000 | 24 | 张 | 周四 | 上午 | 英语 |
| 4 | 0000 | 23 | 张 | 周四 | 晚上 | 英语 |
+----+------+--------+--------+----------+----------+--------+mysql> select 课程名,上课时间,周几上课 from test.kecheng where 周in年='23' and 老师名='张' order by 周几上课;
+--------+----------+----------+
| 课程名 | 上课时间 | 周几上课 |
+--------+----------+----------+
| 英语 | 下午 | 周三 |
| 英语 | 晚上 | 周四 |
+--------+----------+----------+
CREATE TABLE `kecheng2` (
`老师名` enum('张老师') NOT NULL,
`周in年` tinyint(4) NOT NULL,
`上课时间` enum('上午','下午','晚上') NOT NULL,
`星期日` enum('物理','化学','外语','语文','数学') NOT NULL,
`星期一` enum('物理','化学','外语','语文','数学') NOT NULL,
`星期二` enum('物理','化学','外语','语文','数学') NOT NULL,
`星期三` enum('物理','化学','外语','语文','数学') NOT NULL,
`星期四` enum('物理','化学','外语','语文','数学') NOT NULL,
`星期五` enum('物理','化学','外语','语文','数学') NOT NULL,
`星期六` enum('物理','化学','外语','语文','数学') NOT NULL,
UNIQUE KEY `a` (`上课时间`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=gbk;mysql> select * from kecheng2;
+--------+--------+----------+--------+--------+--------+--------+--------+--------+--------+
| 老师名 | 周in年 | 上课时间 | 星期日 | 星期一 | 星期二 | 星期三 | 星期四 | 星期五 | 星期六 |
+--------+--------+----------+--------+--------+--------+--------+--------+--------+--------+
| 张老师 | 22 | 上午 | 物理 | 物理 | 物理 | 物理 | 物理 | 物理 | 物理 |
| 张老师 | 22 | 下午 | 外语 | 外语 | 语文 | 语文 | 语文 | 数学 | 数学 |
| 张老师 | 22 | 晚上 | 语文 | 语文 | 外语 | 语文 | 物理 | 数学 | 外语 |
+--------+--------+----------+--------+--------+--------+--------+--------+--------+--------+
当然 这样也行
CREATE TABLE `kecheng2` (
`老师名` varchar(10) NOT NULL,
`周in年` tinyint(4) NOT NULL,
`上课时间` enum('上午','下午','晚上') NOT NULL,
`星期日` enum('物理','化学','外语','语文','数学') NOT NULL,
`星期一` enum('物理','化学','外语','语文','数学') NOT NULL,
`星期二` enum('物理','化学','外语','语文','数学') NOT NULL,
`星期三` enum('物理','化学','外语','语文','数学') NOT NULL,
`星期四` enum('物理','化学','外语','语文','数学') NOT NULL,
`星期五` enum('物理','化学','外语','语文','数学') NOT NULL,
`星期六` enum('物理','化学','外语','语文','数学') NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
再来一个行列转换
课程表(ID,NAME)
排课表(教师ID,课程ID,时间 )
用交叉表形成你要求的格式