Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 存储过程中的多个查询不工作?_Mysql_Sql_Stored Procedures_Pdo_Query Optimization - Fatal编程技术网

Mysql 存储过程中的多个查询不工作?

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

虽然我可能没有遵循构建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(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的问题吗?在使用过程的多查询实现中是否存在任何问题。很难从您的问题中分辨出来。您没有样本数据、所需结果或用于调用存储过程的代码。