2016-12-14 19 views
0

MySQLのストアドプロシージャによって処理される可能性の低いイベントに直面しています。 私はストアドプロシージャ内で複数の行を検索することができましたが、実際に行えるようになる前にテストしています。同じ値を何度も繰り返し挿入するストアドプロシージャ

現在の問題は、以下のクエリの結果が100の異なる結果セットを返すことです。

ただし、挿入するクエリが問題の開始場所になっている場合。同じ@UIDを100に達するまで何度も何度も挿入しています。

挿入する前に次の行にインクリメントできる方法はありますか?

DECLARE pSpot INT(11) DEFAULT 0; 
DECLARE con INT(11) DEFAULT 97; 
DECLARE tempString VARCHAR(255) DEFAULT NULL; 
DECLARE x INT(11) DEFAULT 0; 

IF(pSpot<=97) -- condition 1 
THEN 

SELECT @uid:=uid, 
     nickname, 
     lastsync, 
     dob, 
     gender, 
     gender_preference, 
     Latest_LAT, 
     Latest_LON, 
     country, 
     imagetoken 
FROM search_optimized_table 
where country = @csid 
    and TIMESTAMPDIFF(YEAR,DOB,CURDATE()) BETWEEN minAge and maxAge 
    and [email protected] 
    and lastsync BETWEEN UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL -7 DAY)) 
    and UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL 0 DAY)) 
LIMIT con; 

SET con = con - pSpot; 
SET pSpot = pSpot + (Select found_rows()); 

WHILE x <= pSpot DO 
    INSERT INTO temp_local_history (pUid) values (@uid); 
END WHILE; 
+0

これは実際のコードですか?無意味な(と終了していない)ifと無限のwhileループがあるので、私は尋ねます。 –

+0

@ P.Salmonそれは実際のものではなく、ちょうどその一部です。 – FreedomPride

+0

あなたの選択があなたがしたいことをしている場合は、無限ループwhileをドロップして、代わりにuidだけを選択して同じ条件を使用するinsertを代用することができます。 –

答えて

0

カーソルメソッドが私に0を返すので、私は解決策を実行しました。

IF(pSpot<=97) -- condition 1 
       THEN 
       SET con = con - pSpot; 
       INSERT INTO temp_local_search(
       SELECT @uid:=uid FROM search_optimized_table where country = @csid and TIMESTAMPDIFF(YEAR,DOB,CURDATE()) BETWEEN minAge and maxAge and [email protected] and lastsync BETWEEN UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL -7 DAY)) and UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL 0 DAY)) LIMIT con 
       ); 
関連する問題