免费注册 查看新帖 |

Chinaunix

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

各位老大,帮忙看看这个问题!谢谢! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-03 17:05 |只看该作者 |倒序浏览
5可用积分
想做一个词频统计,写了一个存储过程

mysql> delimiter //
mysql> create procedure keyword_stat( IN Keyword varchar(100) , IN Type varchar(100) , OUT count INT )
    -> BEGIN
    -> IF EXISTS( select * from keyword where word=Keyword&&type=Type)
    -> THEN
    -> update keyword set freq=freq+1 where word=Keyword&&type=Type;
    -> ELSE
    -> insert into keyword ( word, type,freq) values ( Keyword , Type , 1 );
    -> END IF;
    -> END//
delimiter ;Query OK, 0 rows affected (0.00 sec)

在运行后
mysql> call keyword_stat( "1" , "2" , @a) ;
Query OK, 1 row affected (0.01 sec)

mysql> select * from keyword;
+------+------+---------------------+------+
| word | type | time                | freq |
+------+------+---------------------+------+
| 1    | 2    | 2009-08-03 17:02:12 |    1 |
+------+------+---------------------+------+
1 row in set (0.01 sec)

又运行
mysql> call keyword_stat( "1" , "3" , @a) ;
Query OK, 1 row affected (0.00 sec)

mysql> select * from keyword;
+------+------+---------------------+------+
| word | type | time                | freq |
+------+------+---------------------+------+
| 1    | 2    | 2009-08-03 17:02:12 |    2 |
+------+------+---------------------+------+
1 row in set (0.00 sec)

结果并没有新增一条记录,而是把第一条记录频率给加了1.

再运行
mysql> call keyword_stat( "2" , "3" , @a) ;
Query OK, 1 row affected (0.00 sec)

mysql> select * from keyword;
+------+------+---------------------+------+
| word | type | time                | freq |
+------+------+---------------------+------+
| 1    | 2    | 2009-08-03 17:02:12 |    2 |
| 2    | 3    | 2009-08-03 17:03:48 |    1 |
+------+------+---------------------+------+
2 rows in set (0.00 sec)

感觉where 后面的条件只有第一个执行了判断,第二个条件没起作用

各位帮忙看看啊。谢谢!

我是mysql新手,呵呵

最佳答案

查看完整内容

你的输入参数 Type是mysql的保留字。改个变量名就ok了。同时把&&改成and

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
2 [报告]
发表于 2009-08-03 17:05 |只看该作者
你的输入参数 Type是mysql的保留字。改个变量名就ok了。同时把&&改成and

delimiter //
create procedure keyword_stat( IN Keyword varchar(100) , IN m_type varchar(100) , OUT count INT )
BEGIN
IF EXISTS( select * from keyword where word= Keyword and type= m_type)
THEN
update keyword set freq=freq+1 where word=Keyword and type=m_type;
ELSE
insert into keyword ( word, type,freq) values ( Keyword ,m_type , 1 );
END IF;
END//

论坛徽章:
0
3 [报告]
发表于 2009-08-03 17:06 |只看该作者
mysql 版本

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 24
Server version: 5.1.37-community MySQL Community Server (GPL)

linux rhel5

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
4 [报告]
发表于 2009-08-03 17:15 |只看该作者
&& and

论坛徽章:
0
5 [报告]
发表于 2009-08-03 17:33 |只看该作者
谢谢楼上,and 也试过了,结果一样啊

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
6 [报告]
发表于 2009-08-03 17:46 |只看该作者
mysql> select * from `um_roles`    where RoleName="企业供货商角色" and id=7;
+----+-----------------------+-------------+
| ID | RoleName              | Description |
+----+-----------------------+-------------+
|  7 | 企业供货商角色        | NULL        |
+----+-----------------------+-------------+
1 row in set (0.00 sec)

mysql> drop PROCEDURE if EXISTS keyword_stat;
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter //
mysql> create procedure keyword_stat( IN Keyword varchar(100) , IN Type INT )
    ->  BEGIN
    ->  IF EXISTS( select * from `um_roles`    where RoleName=Keyword and id=Type)
    ->  THEN
    -> select 3;
    -> ELSE
    -> select 4;
    ->  END IF;
    ->  END//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> call  keyword_stat("企业供货商角色","5");
+---+
| 4 |
+---+
| 4 |
+---+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> call  keyword_stat("企业供货商角色","7");
+---+
| 3 |
+---+
| 3 |
+---+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql>

论坛徽章:
0
7 [报告]
发表于 2009-08-03 18:52 |只看该作者
谢谢啦,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP