J'ai une table avec des résultats de la course et p> Je veux stocker le lieu résultant dans une table différente avec p> DROP FUNCTION IF EXISTS FortyTwo;
DELIMITER //
SET @place = 1//
SET @times = cast('00:00:00.000' as TIME(3))//
SET @y = 1//
CREATE FUNCTION `FortyTwo`(xtime TIME(3), xstartnr varchar(10)) RETURNS INT
BEGIN
DECLARE x INT;
IF @times = xtime THEN
SET x = @place;
ELSE
SET @place = @y;
SET x = @place;
SET @times = xtime;
END IF;
SET @y = @y +1;
insert into fls119_platzierung (start_nr, platz, zeit) VALUES (xstartnr, x, xtime) on duplicate key update platz = x, zeit = xtime;
RETURN x;
END//
DELIMITER ;
select FortyTwo(timediff(zeit7, zeit1), start_nr), start_nr, timediff(zeit7, zeit1) from fls119_ergebnisse erg where timediff(zeit7, zeit1) > 0 and rennen = 21
ORDER BY timediff(zeit7, zeit1) asc
3 Réponses :
Vous devez utiliser des variables locales ( @variable code>). Les variables définies par l'utilisateur conservent leurs valeurs tout au long du processus et dans votre exemple, l'initialisation des variables est en dehors de la routine menant à des résultats inattendus. P>
Merci pour votre réponse. Si j'utilise des variables locales, comment puis-je garder le dernier numéro de lieu? Je dois distinguer si deux participants ont la même période finale, ils atteignent le même endroit (par exemple le lieu trois). Le prochain a eu la cinquième place, de sorte que la quatrième place n'est pas incluse ... p>
Pas sûr, l'initialisation variable est le problème. L'initialisation fonctionne, je pense. Je me demande simplement que Start_6 est mis à jour avec la place 12 au lieu de 1. La valeur de retour de FORTYTWO m'a donné le résultat correct. Donc numéro 6 sur la première place et ainsi de suite. P>
J'ai supprimé l'indice principal sur FLS119_PLATZIERUNG. Donc, le numéro '0006' a deux entrées! Un avec le bon endroit '1' et un avec '12' comme lieu. Donc, la question change un peu. Pourquoi le premier enregistrement de mon instruction SELECT est-il exécuté une seconde fois? P>