2016-12-14 4 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, но используя то же самое, что и условия. –

ответ

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 
       ); 
Смежные вопросы