喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 帮助

RSS 订阅当前论坛  

喜悦证交所已经关闭

上一主题 下一主题
     
标题: [问题] 求一数据库表的设计  
 
lzyy
注册会员
Rank: 2


UID 77082
精华 0
积分 93
帖子 58
金钱 93 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-7-26
状态 离线
[广告]: q m
求一数据库表的设计

我不知道类似论坛的今日发帖量,这个数据库表是怎么设计的,现在想要实现一个类似的功能,就是可以记录图片的日浏览量,周浏览量,月浏览量。

如果直接设计成
cur_date   |    pic_id    |    view_num
那如果每天要浏览1000张不同的图片,就意味着这张表要增加一千条记录,规模实在太大,后来想想,反正最多只要一个月的数据,也就是三十天,那只保留最新的30天的数据就可以了,这样就需要写一个判断语句,来检查数据库是否包含已过期的数据,每点一张图片就判断查询一次,效率肯定不行

希望大家能给个思路,谢谢啦




my php blog
2007-3-10 05:13 PM#1
查看资料  Blog  发短消息  顶部
 
seakingx
金牌会员
Rank: 6Rank: 6


UID 75142
精华 0
积分 1264
帖子 801
金钱 663 喜悦币
威望 0
人脉 601
阅读权限 70
注册 2006-6-18
来自 海口
状态 离线
[推荐阅读] 这个下拉菜单怎样改一下才行?向各位请教.
我有一个思路 , 不知道是否合适, 先给出月日 的思路
pic_id |  month_view | day_view | cur_month | cur_day
1        |  231             |  12           | 2007-03     |   2007-03-10

即:每个图片对应一个访问记录
在update 的时候需要用mysql 的函数判断当前日期是否和记录中的日期相符合, 如何符合+1 ,不符合修改记录日期,数量设置为1

以下是测试脚本

drop table if exists f2;
create table f2(
pic_id int,
cur_day char(20) default '',
day_view int default 0,
cur_month char(20) default '' ,
month_view int default 0 );

insert into f2(pic_id) values(1);

---以下是每次点击要做的update
update f2 set day_view = day_view+1 where cur_day=DATE_FORMAT(Now(),'%Y-%m-%d');
update f2 set day_view = 1 , cur_day = DATE_FORMAT(Now(),'%Y-%m-%d')  where cur_day!=DATE_FORMAT(Now(),'%Y-%m-%d');

update f2 set month_view = month_view+1 where cur_month=DATE_FORMAT(Now(),'%Y-%m');
update f2 set month_view = 1 , cur_month = DATE_FORMAT(Now(),'%Y-%m')  where cur_month!=DATE_FORMAT(Now(),'%Y-%m');
-- update 结束

select * from f2;
[ 本帖最后由 seakingx 于 2007-3-10 09:43 PM 编辑 ]




锐升科技
2007-3-10 09:38 PM#2
查看资料  Blog  发短消息  QQ  顶部
 
seakingx
金牌会员
Rank: 6Rank: 6


UID 75142
精华 0
积分 1264
帖子 801
金钱 663 喜悦币
威望 0
人脉 601
阅读权限 70
注册 2006-6-18
来自 海口
状态 离线
[推荐阅读] 找工作啦,我在深圳,各位兄弟帮忙啦。。
mysql> create table f2(
    -> pic_id int,
    -> cur_day char(20) default '',
    -> day_view int default 0,
    -> cur_month char(20) default '' ,
    -> month_view int default 0 );
Query OK, 0 rows affected (0.10 sec)

mysql>
mysql> insert into f2(pic_id) values(1);
Query OK, 1 row affected (0.02 sec)

mysql>
mysql> update f2 set day_view = day_view+1 where cur_day=DATE_FORMAT(Now(),'%Y-%
m-%d');
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> update f2 set day_view = 1 , cur_day = DATE_FORMAT(Now(),'%Y-%m-%d')  whe
re cur_day!=DATE_FORMAT(Now(),'%Y-%m-%d');
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>
mysql> update f2 set month_view = month_view+1 where cur_month=DATE_FORMAT(Now()
,'%Y-%m');
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> update f2 set month_view = 1 , cur_month = DATE_FORMAT(Now(),'%Y-%m')  wh
ere cur_month!=DATE_FORMAT(Now(),'%Y-%m');
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from f2;
+--------+------------+----------+-----------+------------+
| pic_id | cur_day    | day_view | cur_month | month_view |
+--------+------------+----------+-----------+------------+
|      1 | 2007-03-10 |        1 | 2007-03   |          1 |
+--------+------------+----------+-----------+------------+
1 row in set (0.00 sec)

mysql> update f2 set day_view = day_view+1 where cur_day=DATE_FORMAT(Now(),'%Y-%
m-%d');
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update f2 set day_view = 1 , cur_day = DATE_FORMAT(Now(),'%Y-%m-%d')  whe
re cur_day!=DATE_FORMAT(Now(),'%Y-%m-%d');
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql>
mysql> update f2 set month_view = month_view+1 where cur_month=DATE_FORMAT(Now()
,'%Y-%m');
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update f2 set month_view = 1 , cur_month = DATE_FORMAT(Now(),'%Y-%m')  wh
ere cur_month!=DATE_FORMAT(Now(),'%Y-%m');
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> select * from f2;
+--------+------------+----------+-----------+------------+
| pic_id | cur_day    | day_view | cur_month | month_view |
+--------+------------+----------+-----------+------------+
|      1 | 2007-03-10 |        2 | 2007-03   |          2 |
+--------+------------+----------+-----------+------------+
1 row in set (0.00 sec)

mysql> update f2 set day_view = day_view+1 where cur_day=DATE_FORMAT(Now(),'%Y-%
m-%d');
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update f2 set day_view = 1 , cur_day = DATE_FORMAT(Now(),'%Y-%m-%d')  whe
re cur_day!=DATE_FORMAT(Now(),'%Y-%m-%d');
Query OK, 0 rows affected (0.01 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql>
mysql> update f2 set month_view = month_view+1 where cur_month=DATE_FORMAT(Now()
,'%Y-%m');
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update f2 set month_view = 1 , cur_month = DATE_FORMAT(Now(),'%Y-%m')  wh
ere cur_month!=DATE_FORMAT(Now(),'%Y-%m');
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> select * from f2;
+--------+------------+----------+-----------+------------+
| pic_id | cur_day    | day_view | cur_month | month_view |
+--------+------------+----------+-----------+------------+
|      1 | 2007-03-10 |        3 | 2007-03   |          3 |
+--------+------------+----------+-----------+------------+
1 row in set (0.00 sec)




锐升科技
2007-3-10 09:41 PM#3
查看资料  Blog  发短消息  QQ  顶部
 
fly512 (我本如是)
版主
Rank: 7Rank: 7Rank: 7
人生的另一半


UID 42566
精华 0
积分 2509
帖子 2395
金钱 1779 喜悦币
威望 0
人脉 730
阅读权限 100
注册 2004-10-31
来自 亚特兰迪斯
状态 离线
[推荐阅读] Smarty模板的section三层嵌套应该怎么写?


<?php
function UpdateCount($type$pretime)
{
    
$timetemp time();
    switch (
$type)
    {
        case 
'd'://判断今日访问是否加一
            
$dtime mktime(000date("m") , date("d"), date("Y"));
            if (
$pretime $dtime 0) return 1;
            else return 
0;
        break;

        case 
'w':  //判断本周访问是否加一
            
$wtime mktime(000date("m"), date("d") - date('w'$timetemp), date("Y"));
            if (
$pretime $wtime 0) return 1;
            else return 
0;
        break;

        case 
'm'//判断本月访问是否加一
            
$mtime mktime(000date("m"), 0date("Y"));
            if (
$pretime $mtime 0) return 1;
            else return 
0;
        break;
    }
}
?>




不要使用数据库
PHP中国
2007-3-10 10:47 PM#4
查看资料  访问主页  Blog  发短消息  顶部
 
fly512 (我本如是)
版主
Rank: 7Rank: 7Rank: 7
人生的另一半


UID 42566
精华 0
积分 2509
帖子 2395
金钱 1779 喜悦币
威望 0
人脉 730
阅读权限 100
注册 2004-10-31
来自 亚特兰迪斯
状态 离线
[推荐阅读] 北京 公益网站诚招PHP程序员(欢迎新手、实习生)
5个字段,今日,本周,本月,总浏览,上次访问时间



不要使用数据库
PHP中国
2007-3-10 10:49 PM#5
查看资料  访问主页  Blog  发短消息  顶部
 
seakingx
金牌会员
Rank: 6Rank: 6


UID 75142
精华 0
积分 1264
帖子 801
金钱 663 喜悦币
威望 0
人脉 601
阅读权限 70
注册 2006-6-18
来自 海口
状态 离线
[推荐阅读] 关于正则
版主出马果然厉害, 学习中...



锐升科技
2007-3-10 11:32 PM#6
查看资料  Blog  发短消息  QQ  顶部
 
sanders_yao
版主
Rank: 7Rank: 7Rank: 7
or2 =333


UID 30286
精华 0
积分 11758
帖子 4930
金钱 11755 喜悦币
威望 0
人脉 3
阅读权限 100
注册 2004-7-23
来自 北京 菜户营
状态 离线
[推荐阅读] 查询的问题
DZ论坛今日总发帖数的统计我没有仔细研究过
但是各个论坛的发帖数都缓存在各个论坛的数据表和缓存文件中
数据表对应的字段是forums.todayposts 估计今日发帖总数就是将这些数字合计起来的结果吧
2007-3-11 09:42 AM#7
查看资料  Blog  发短消息  顶部
 
luzhou (luzhou)
金牌会员
Rank: 6Rank: 6
资深会员



UID 22070
精华 0
积分 1048
帖子 1037
金钱 1048 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2003-7-28
状态 离线
[推荐阅读] 查询的问题
嗯,不错咯。




自在的PHPer~
2007-3-11 09:46 AM#8
查看资料  发短消息  顶部
 
lzyy
注册会员
Rank: 2


UID 77082
精华 0
积分 93
帖子 58
金钱 93 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-7-26
状态 离线
[推荐阅读] 上海热线招聘PHP高级软件工程师
谢谢seakingx,你的思路,我觉得应该是可行的

谢谢fly512版主,btw:应该是六个字段吧,还有一个pic_id

问题基本解决




my php blog
2007-3-11 11:59 AM#9
查看资料  Blog  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.031185 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP