mysql存儲過程,實現(xiàn)兩個游標(biāo)的循環(huán)_MySQL教程
推薦:MYSQL的導(dǎo)入導(dǎo)出與還原備份導(dǎo)入與導(dǎo)出主要牽扯到兩個命令source和MySQLdump: 1:導(dǎo)入:進(jìn)入MySQL命令行中,進(jìn)入任意一個將要被導(dǎo)入的數(shù)據(jù)庫,再導(dǎo)入。具體的命令如下:進(jìn)入Windows的dos命令行'----------mysql -u root -p-------------輸入進(jìn)入數(shù)據(jù)庫的密碼------create database shujuku;-----
今天用php開發(fā)網(wǎng)站,遇到一個需求。統(tǒng)計網(wǎng)站關(guān)鍵詞的google流量,計算本周某個關(guān)鍵詞對于上周的google流量的增長。goole流量統(tǒng)計是通過日志分析程序獲取。本打算差值計算也用php實現(xiàn),但是一想還要循環(huán)查詢數(shù)據(jù)庫,會造成數(shù)據(jù)庫壓力,于是乎編寫了一個存儲過程。
首先數(shù)據(jù)結(jié)構(gòu):
CREATE TABLE `mobile_keywords_weeklog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`topdate` date DEFAULT NULL,
`keywords_id` int(11) DEFAULT '0',
`s_pv` int(11) DEFAULT '0',
`s_gv` int(11) DEFAULT '0',
`s_bv` int(11) DEFAULT '0',
`d_value` int(11) DEFAULT '0' COMMENT '和上一周的差值',
PRIMARY KEY (`id`),
KEY `topdate` (`topdate`),
KEY `keywords_id` (`keywords_id`),
KEY `s_pv` (`s_gv`)
) ENGINE=MyISAM AUTO_INCREMENT=702 DEFAULT CHARSET=latin1
存儲過程,實現(xiàn)了雙游標(biāo)的循環(huán):
DELIMITER $$
USE `brother_mobile`$$
DROP PROCEDURE IF EXISTS `pro_week_stat`$$
CREATE DEFINER=`root`@`%` PROCEDURE `pro_week_stat`()
top:BEGIN
DECLARE done INT DEFAULT 0;
DECLARE curr_week DATE;
DECLARE last_week DATE;
DECLARE a1,b1,c1 INT;
DECLARE a2,b2,c2 INT;
DECLARE d INT;
DECLARE is_update INT DEFAULT 0;
DECLARE all_week CURSOR FOR SELECT topdate FROM brother_mobile.mobile_keywords_weeklog GROUP BY topdate ORDER BY topdate DESC LIMIT 0,2;
DECLARE cur1 CURSOR FOR SELECT id,keywords_id,s_gv FROM brother_mobile.mobile_keywords_weeklog WHERE topdate = curr_week;
DECLARE cur2 CURSOR FOR SELECT id,keywords_id,s_gv FROM brother_mobile.mobile_keywords_weeklog WHERE topdate = last_week;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN all_week;
FETCH all_week INTO curr_week;
FETCH all_week INTO last_week;
CLOSE all_week;
IF IFNULL(curr_week,'')='' OR IFNULL(last_week,'')='' THEN
LEAVE top;
END IF;
OPEN cur1;
out_repeat:REPEAT
FETCH cur1 INTO a1,b1,c1;
BEGIN
DECLARE done1 INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done1 = 1;
OPEN cur2;
inner_repeat:REPEAT
FETCH cur2 INTO a2,b2,c2;
IF NOT done THEN
SET is_update=0;
IF b1 = b2 THEN
SET d = c1-c2;
SET is_update = 1;
UPDATE brother_mobile.mobile_keywords_weeklog SET d_value = d WHERE id = a1;
LEAVE inner_repeat;
END IF;
END IF;
UNTIL done1 END REPEAT inner_repeat;
CLOSE cur2;
END;
IF is_update <> 1 THEN
UPDATE brother_mobile.mobile_keywords_weeklog SET d_value = c1 WHERE id = a1;
END IF;
UNTIL done END REPEAT out_repeat;
CLOSE cur1;
END$$
DELIMITER ;
其中存儲過程中的具體語法可以查看mysql的幫助文檔。
最后用call pro_week_stat()調(diào)用即可。
分享:MySQL:grant 語法詳解(MySQL5.X)本文實例,運(yùn)行于MySQL5.0 及以上版本。 MySQL 賦予用戶權(quán)限命令的簡單格式可概括為: grant 權(quán)限on 數(shù)據(jù)庫對象to 用戶 一、grant 普通數(shù)據(jù)用戶,查詢、插入、更新、刪除數(shù)據(jù)庫中所有表數(shù)據(jù)的權(quán)利。 grant select on testdb.* to common_user@'%' grant insert on test
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
- sqlserver數(shù)據(jù)實時同步到mysql
- 擁有5星評級數(shù)據(jù)庫表結(jié)構(gòu) 如何才能更高效的使用?
- 網(wǎng)站模板:以數(shù)據(jù)庫字段分組顯示數(shù)據(jù)的sql語句
- 驗證實例名稱是否正確
- windows下重啟mysql的方法
- linux下mysql提示mysql deamon failed to start錯誤的解決方法
- MySQL筆記之系統(tǒng)信息函數(shù)詳解
- MySQL的重裝問題解決方法
- 在SQL Server的try...catch語句中獲取錯誤消息代碼的的語句
- mysql常用設(shè)置:字符集編碼、自動完成(自動提示)、監(jiān)聽外網(wǎng)ip
猜你也喜歡看這些
- 經(jīng)驗總結(jié):講解大型數(shù)據(jù)庫的設(shè)計準(zhǔn)則
- SQL Server2005的XML數(shù)據(jù)類型之基礎(chǔ)篇
- sql存儲過程的使用和介紹
- SQL Server不存在或訪問被拒絕 Windows里的一個bug
- SQL Server 2005深層工具和運(yùn)行時間集
- sqlserver數(shù)據(jù)庫出現(xiàn)置疑的解決思路
- 關(guān)于SQL 存儲過程入門基礎(chǔ)(變量)
- 談SQL Data Services將成為云中完整的數(shù)據(jù)庫
- SQLServer 2008中的代碼安全(四) 主密鑰
- SELECT 賦值與ORDER BY沖突的問題
- 相關(guān)鏈接:
- 教程說明:
MySQL教程-mysql存儲過程,實現(xiàn)兩個游標(biāo)的循環(huán)
。