2016-05-27 14 views
0

誰かがこのコードを助けてくれますか? level_idフィールドに5番目のレコードから始まる1の値を正確に入れる方法を理解できません。それはいつも私はよくあなたの問題を理解していれば0が、その後6番目のレコードが1mysqlのレコードのレベルid値(ユーザ定義フィールド["level_id"])の決定について

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_EncodePerson`(
    in p_memberId varchar(45), 
    in p_encodeId varchar(100)) 

    BEGIN 

    DECLARE Lev0 varchar(5); 
    DECLARE Lev1 varchar(5); 

    SET Lev0 = "0"; 
    SET Lev1 = "1"; 

    SELECT @total := count(*) from gph_acquiredpeople 
    where member_Id = p_memberId; 

IF @total <= 4 THEN 
    INSERT INTO gph_acquiredpeople 
    (member_id,encoded_mem_Id,date_encoded,level_id) 
    VALUES (p_memberId,p_encodeId,NOW(),Lev0); 
    UPDATE gph_memberstatus SET available ="0", taken = "1" 
    WHERE Id_number = p_encodeId; 

ELSEIF @total = 5 OR @total >= 5 AND @total < 25 THEN 
    INSERT INTO gph_acquiredpeople 
    (member_id,encoded_mem_Id,date_encoded,level_id) 
    VALUES (p_memberId,p_encodeId,NOW(),Lev1); 
    UPDATE gph_memberstatus SET available ="0", taken = "1" 
    WHERE Id_number = p_encodeId;   
ELSE 
    BEGIN   
    END; 
END IF; 
END 

答えて

0

として開始されたとして残り、解決策は非常に簡単そうです:

あなたが挿入する前に@totalカウントチェックをやっていると

あなたのレコードでは、@totalと(Lev1で挿入したいレコード番号)を比較する必要があります - 1。現在のチェックで、@total = 4のとき、Lev0で挿入し続けると、あなたの.. 5番目のレコード。

だから、次のようになります。解決のための

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_EncodePerson`(
    in p_memberId varchar(45), 
    in p_encodeId varchar(100)) 

    BEGIN 

    DECLARE Lev0 varchar(5); 
    DECLARE Lev1 varchar(5); 

    SET Lev0 = "0"; 
    SET Lev1 = "1"; 

    SELECT @total := count(*) from gph_acquiredpeople 
    where member_Id = p_memberId; 

IF @total < 4 THEN 
    INSERT INTO gph_acquiredpeople 
    (member_id,encoded_mem_Id,date_encoded,level_id) 
    VALUES (p_memberId,p_encodeId,NOW(),Lev0); 
    UPDATE gph_memberstatus SET available ="0", taken = "1" 
    WHERE Id_number = p_encodeId; 

ELSEIF @total >= 4 AND @total < 25 THEN 
    INSERT INTO gph_acquiredpeople 
    (member_id,encoded_mem_Id,date_encoded,level_id) 
    VALUES (p_memberId,p_encodeId,NOW(),Lev1); 
    UPDATE gph_memberstatus SET available ="0", taken = "1" 
    WHERE Id_number = p_encodeId;   
ELSE 
    BEGIN   
    END; 
END IF; 
END 
+0

おかげで、。私はすでに仕事をしていないので、来週までに試してみます。 – Metasphere

+0

先生、レコード番号と違う場合はどうですか?純粋に、レコード数。何か方法はありますか? – Metasphere

+0

私はあなたが望むものを完全に理解していません。代わりにレコード番号をチェックするために、レコード数で実際に行われる '@ total'でチェックを変更しますか? –

関連する問題