Mysql 存储过程中的多个查询不工作?
虽然我可能没有遵循构建DW的确切概念,但我正在研究每天包含大量插入的项目 这里我有一个用户列表,可以根据他们的社交媒体活动状态计数进行监控,这些数据是从公共API获得的。 让列表包含大约50万用户 用户表如下所示:Mysql 存储过程中的多个查询不工作?,mysql,sql,stored-procedures,pdo,query-optimization,Mysql,Sql,Stored Procedures,Pdo,Query Optimization,虽然我可能没有遵循构建DW的确切概念,但我正在研究每天包含大量插入的项目 这里我有一个用户列表,可以根据他们的社交媒体活动状态计数进行监控,这些数据是从公共API获得的。 让列表包含大约50万用户 用户表如下所示: CREATE TABLE IF NOT EXISTS `user_list` ( `id` int(11) NOT NULL, `name` varchar(300) COLLATE utf8_unicode_ci NOT NULL, `location` varchar
CREATE TABLE IF NOT EXISTS `user_list` (
`id` int(11) NOT NULL,
`name` varchar(300) COLLATE utf8_unicode_ci NOT NULL,
`location` varchar(300) COLLATE utf8_unicode_ci NOT NULL,
`time_zone` varchar(300) COLLATE utf8_unicode_ci DEFAULT NULL,
`crawl_status` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
从这个表中,我将获取一组userid,并将它们传递给API,以获取它们的总状态计数
因此,如果我传递10个userid,我将获得一个包含10个userid及其状态计数的数组。我将只从API获取总状态计数,这还需要与过去的总计数进行比较,以获得用户每天的状态计数
这是结果表结构
CREATE TABLE IF NOT EXISTS `user_status_count` (
`user_id` bigint(11) NOT NULL,
`date` date NOT NULL,
`total_status` int(11) NOT NULL,
`status_count_day` int(11) NOT NULL,
PRIMARY KEY (`date`,`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
我将工作流程设想为:
1从爬网状态为0的表user_列表中设置一组ID,将此ID传递给API,并获取包含userid和总状态计数的结果数组
2然后,我需要解析每个用户ID并比较它们的状态。当前和最后一天之间的差异
3需要将此详细信息插入结果表user_status_count
4在完成对每个ID的处理后,我需要更新用户列表表中的爬网状态
由于它涉及大量操作——500k*3选择最后一天的计数+插入结果表+更新用户列表表,所以我尝试在MySQL中使用存储过程
程序如下:
CREATE PROCEDURE GetCount(IN userid INT(11),IN cur_date DATE,IN cur_count INT(11))
BEGIN
DECLARE total_cnt INT;
DECLARE daily_cnt INT;
SELECT total_status
INTO total_cnt
FROM `tc_user_status_count`
WHERE `user_id` = userid AND LAST_DAY(cur_date);
SET daily_cnt = cur_count - total_cnt;
INSERT INTO `tc_user_status_count`
(`user_id`, `date`, `total_status`, `status_count_day`)
VALUES
(userid, cur_date, cur_count, daily_cnt);
UPDATE `tc_user_list` SET `crawl_status`= 1 WHERE `id`= userid;
END
存储过程调用
SET @p0 = '4';
SET @p1 = '2014-09-05';
SET @p2 = '5000';
CALL `GetCount` (
@p0 , @p1 , @p2
);
这里p0是用户id,p1是当前日期,p2是当前状态计数
在传递这些参数时,我希望执行以下一组查询
1.获取每日状态计数,将总计数与前一天进行比较
选择总状态
总计
来自tc\u用户\u状态\u计数
其中user_id=userid和LAST_DAYcur_日期
2.将其插入结果表中
3.更新用户列表表的爬网状态
实际上,这是我创建的第一个存储过程,它没有给出预期的结果。由于我们在这方面考虑了很多,所以我尝试实施SPS。我正在使用PHP-MySQL和PDO进行DB操作
我没有通过创建的存储过程获得正确的结果?这是创建SP时的问题吗?在使用过程的多查询实现中是否存在任何问题
我做事情的方式正确吗?非常感谢您的建议。您有什么问题?@GordonLinoff我创建的存储过程没有得到正确的结果?这是创建SP的问题吗?在使用过程的多查询实现中是否存在任何问题。很难从您的问题中分辨出来。您没有样本数据、所需结果或用于调用存储过程的代码。