一个表的设计有关问题

一个表的设计问题

说明:表里有3个字段,id是一篇文章的id号,words是这篇文章出现的关键的词(一篇文章有3个),date这篇文章发布日期

表结构:

id words date

1 词1 20120407

1 词2 20120407

1 词3 20120407

2 词1 20120407

2 词4 20120407

2 词5 20120407

3 词1 20120407

3 词2 20120407

查询要求:统计某个时间段(date)内 words出现频率最高的前多少个id

问题所在:就现在的表不知道怎么统计的sql怎么写(大概知道用group by之类的…),2或者直接帮在下重新设计表结构都行



select * from (

select words,count(*)

from 表结构

where date between 某个时间段 and 某个时间段

group by words

) t

order by 2 desc limit 20




做了实验

建了一个表

mysql> create table book (id int primary key auto_increment,words varchar(20)

,date timestamp default CURRENT_TIMESTAMP );

mysql> insert into book values(“语文,语文,语文”),(“语文,语文,语文”) ,(“数学,语文,化学”);

mysql> insert into book(words) values(“数学,语文,因为”) ;

Query OK, 1 row affected (0.26 sec)

mysql> insert into book(words) values(“数学,语文,历史”) ;

Query OK, 1 row affected (0.27 sec)

mysql> select * from book;

+—-+——————+———————+

| id | words | date |

+—-+——————+———————+

| 1 | 语文,语文,语文 | 2012-04-07 21:54:33 |

| 2 | 数学,语文,化学 | 2012-04-07 21:54:59 |

| 3 | 数学,语文,因为 | 2012-04-07 21:55:14 |

| 4 | 数学,语文,历史 | 2012-04-07 21:55:25 |

+—-+——————+———————+

这样能解决冗余,但是这个sql 有点不好写

如果不考虑冗余就很好写这sql

1楼就能解决。

一个表的设计有关问题

相关文章:

你感兴趣的文章:

标签云: