MySQL存储过程从表中获取特定用户ID的完整数据

时间:2013-08-02 09:02:05

标签: mysql stored-procedures

在获取游标时,crnt_user_skills从表中获取所有数据,而不是获取特定用户标识的数据。我甚至尝试手动提供特定的用户ID,但从表中获取所有数据而不是给定用户ID。我的代码出了什么问题?请帮忙? 实际上在游标user_data中出现了多个游标,我只在user_data游标中给出了一个游标。变量声明实际上是所有游标都不会对此感到恐慌。

DELIMITER $$
CREATE PROCEDURE test2(IN latd FLOAT(10,6),IN lngtd FLOAT(10,6),IN user_ind INT,IN userid INT,user_exprts INT,user_intn INT,regdate TIMESTAMP)
COMMENT 'To list users within 150 miles range'
BEGIN
    DECLARE user_cnt_hndlr,ind_cnt_hndlr,exprts_cnt_hndlr,crnt_events_cnt_hndlr,mchd_uid,mchd_ind,mchd_clustered_industry_id,mchd_exprts,mchd_clustered_expertise_id,mchd_intn,weight_score,prev_ind_score,prev_exprts_score,user_event_id,user_skl_id,user_strngth,skl_cnt,user_skills_cnt_hndlr INT;
    DECLARE mchd_miles VARCHARACTER(50);
    DECLARE user_bosi_result CHAR(2);
    DECLARE mchd_regdate TIMESTAMP;
    DECLARE user_data CURSOR FOR
        SELECT DISTINCT ((ACOS(SIN(latd * PI() / 180) * SIN(users.lat * PI() / 180) + COS(latd * PI() / 180) * COS(users.lat * PI() / 180) * COS((lngtd - users.lang) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance`,`users`.`id` AS `userid`, `users`.`industry`, `users`.`user_expertise`, `users`.`user_intention`, `users`.`reg_date`
        FROM `users`
        WHERE user_status = 'A'
        AND id <> userid
        HAVING distance <=250;
    DECLARE crnt_user_skills CURSOR FOR
        SELECT skillid,strength FROM user_skills WHERE userid = userid ORDER BY skillid ASC;
    SET weight_score = 0;
    user_data_section : BEGIN
        DECLARE CONTINUE HANDLER FOR NOT FOUND
            SET user_cnt_hndlr = 1;
        OPEN user_data;
            user_cursor_loop: LOOP
                FETCH user_data INTO mchd_miles,mchd_uid,mchd_ind,mchd_exprts,mchd_intn,mchd_regdate;
                IF user_cnt_hndlr = 1 THEN
                    LEAVE user_cursor_loop;
                END IF;
                skill_section : BEGIN
                    DECLARE CONTINUE HANDLER FOR NOT FOUND
                        SET user_skills_cnt_hndlr = 1;
                    SET skl_cnt = 0;
                    OPEN crnt_user_skills;
                        usr_skl_loop : LOOP
                            FETCH crnt_user_skills INTO user_skl_id,user_strngth;
                            IF user_skills_cnt_hndlr = 1 THEN
                                LEAVE usr_skl_loop;
                            END IF;
                            SET skl_cnt = getSkillsCount(skl_cnt,user_skl_id,user_strngth,mchd_uid);
                            INSERT INTO recmd_cnds_test(usr_ind1,matchd_ind1,industry_id1,clustered_industry_id1,bosi) VALUES(userid,user_skl_id,user_strngth,mchd_uid,'SI');
                        END LOOP usr_skl_loop;
                    CLOSE crnt_user_skills;
                    SET user_skills_cnt_hndlr = 0;
                    SET weight_score = calculateSkillsWeightScore(weight_score,skl_cnt);
                END skill_section;
                INSERT INTO `recmd_cnds` (`user_id` ,`recmd_id` ,`wgt_score`)VALUES (userid, mchd_uid, weight_score);
            END LOOP user_cursor_loop;
        CLOSE user_data;
        SET user_cnt_hndlr = 0;
    END user_data_section;
END$$

1 个答案:

答案 0 :(得分:0)

我得到了答案,在查询SELECT skillid,strength FROM user_skills WHERE userid = userid ORDER BY skillid ASC;变量声明中,userid和字段名称userid不应该相同。与查询userid = userid中一样,即使字段名称包含“。