免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1566 | 回复: 0
打印 上一主题 下一主题

关于UPDATE的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-11 22:00 |只看该作者 |倒序浏览
CREATE TABLE `limitime` (
  `UserName` varchar(64) NOT NULL,
  `maxtime` int(11) NOT NULL,
  PRIMARY KEY (`UserName`)
) ENGINE=MyISAM;

CREATE TABLE `radacct` (
  `UserName` varchar(64) NOT NULL DEFAULT '',
  `AcctSessionTime` int(12) DEFAULT NULL,
  PRIMARY KEY (`UserName`),
) ENGINE=MyISAM;

CREATE TABLE `radcheck` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `UserName` varchar(64) NOT NULL DEFAULT '',
  `Attribute` varchar(32) NOT NULL DEFAULT '',
  `op` char(2) NOT NULL DEFAULT '==',
  `Value` varchar(253) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `UserName` (`UserName`(32))
) ENGINE=MyISAM;

这样一个数据库其中表limitime用来存储用户可以使用的总的时间限制,如果是这个用户包月的话这个表中就没有这个用户的信息;radacct是用户每次使用了的时间;radcheck是用户的信息,Value这个字段存储用户每次可以在线的时间限制,是可以为空的。服务器不会判断用户总的时间,只会判断radcheck表中的值来设置用户每次在线时间,为0时不允许登陆,包月用户没有值。每次用户下线时都会发送一条更新语句到radacct这个表,现在想也让同时更新radcheck表,重新设置用户的每次在线时间,这样就可以限制用户问的上线时间了,但应用程序只可以接受一条SQL语句,本来可以用UPDATE radacct,radcheck set radacct.AcctSessionTime=当次在线时间 radcheck.Value=(SELECT limitime.maxtime - SUM(radacct.AcctSessionTime) FROM limitime,radacct WHERE limitime.UserName=radacct.UserName AND radacct.UserName=当前用户) WHERE radacct.UserName=radcheck.UserName AND radcheck.UserName=当前用户;这样来更新,但问题是现在有包月用户,他在limitime这个表中是没有记录的,用这条语句肯定会出错的。现在只用一条语句怎么来实现呢?

[ 本帖最后由 不用马甲 于 2007-4-11 22:12 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP