建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

当前位置: 建站学 > 数据库 > Mysql 教程 >

有关数据库设计问题的分析

时间:2011-03-14 15:28来源: 作者: 点击:
要求:a 表:`id`, `name` ; 作为词表,存放不同的词;b 表:`id`, `attr` ; 作为属性表,存放各种属性;其中,一个词可以有不同的多个属性;而每个词的属性的个数也不一定相同;c 表:`id`, `aid`, `bid` ; 作为关系表,存放每个词的对应关系;写出 SQL 语句,来得到每

本文详细介绍下数据库设计问题,要求:a 表:`id`, `name` ; 作为词表,存放不同的词;b 表:`id`, `attr` ; 作为属性表,存放各种属性;其中,一个词可以有不同的多个属性;而每个词的属性的个数也不一定相同;c 表:`id`, `aid`, `bid` ; 作为关系表,存放每个词的对应关系;写出 SQL 语句,来得到每个词拥有属性总数的逆向(DESC)排序:

各种表的信息如下:

我们预先放入测试的数据,如下:

mysql> SELECT * FROM `a`; SELECT * FROM `b`; SELECT * FROM `c`;
+----+------+
| id | name |
+----+------+
|  1 | a    |
|  2 | b    |
|  3 | c    |
|  4 | d    |
|  5 | e    |
+----+------+
5 rows in set (0.00 sec)
  
+----+------+
| id | attr |
+----+------+
|  1 | 111  |
|  2 | 112  |
|  3 | 113  |
|  4 | 123  |
|  5 | 221  |
|  6 | 231  |
|  7 | 252  |
|  8 | 278  |
|  9 | 292  |
| 10 | 256  |
| 11 | 578  |
| 12 | 653  |
| 13 | 521  |
| 14 | 502  |
+----+------+
14 rows in set (0.00 sec)
  
+----+-----+-----+
| id | aid | bid |
+----+-----+-----+
|  1 |   1 |   1 |
|  2 |   1 |   2 |
|  3 |   1 |   4 |
|  4 |   1 |   7 |
|  5 |   2 |   8 |
|  6 |   2 |  11 |
|  7 |   3 |   3 |
|  8 |   3 |   5 |
|  9 |   3 |   6 |
| 10 |   4 |   9 |
| 11 |   4 |  10 |
| 12 |   5 |  12 |
| 13 |   5 |  13 |
| 14 |   5 |  14 |
+----+-----+-----+
14 rows in set (0.00 sec)

首先执行下列语句:

mysql> SELECT COUNT(`bid`) AS `attrcounts` FROM `c` GROUP BY `aid` ORDER BY `attrcounts` DESC;
+------------+
| attrcounts |
+------------+
|          4 |
|          3 |
|          3 |
|          2 |
|          2 |
+------------+
5 rows in set (0.00 sec)

进而,我们再连表:

mysql> SELECT a.name, COUNT(c.bid) AS `attrcounts` FROM `c` LEFT JOIN `a` ON a.id = c.aid GROUP BY c.aid ORDER BY `attrcounts` DESC;
+------+------------+
| name | attrcounts |
+------+------------+
| a    |          4 |
| c    |          3 |
| e    |          3 |
| b    |          2 |
| d    |          2 |
+------+------------+
5 rows in set (0.00 sec)

我们得到了结果;

------------------------------------------------------

补充一些基础知识:

如何修改已有表的列:http://www.w3school.com.cn/sql/sql_alter.asp

GROUP BY 相关知识:http://www.w3school.com.cn/sql/sql_groupby.asp 

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片