Mysql 5.5 - Niepoprawna składnia pętli LOOP?

0

Próbuję stworzyć sobie pewną funkcję, która będzie sprawdzała czy podana nazwa użytkownika i adres IP będzie zgadzał się z informacjami zawartymi w pewnej tabeli. Ponieważ zakresów może być kilka a dokładniej dowolnie wiele chcę to zrobić przy użyciu pętli LOOP. Problem polega na tym, że nie mogę zmusić mojego kodu do wykonywania się. Chodzi dokładnie o poniższą pętlę, z której i tak wyciąłem resztę użytecznego kodu.

label: LOOP
	SET @i = @i + 1;
	IF @i > @rang_num
		LEAVE label;
	END IF;
END LOOP label;

Cały czas dostaję błąd o niepoprawnej składki. Co lepszę, gdy próbuje wykonać przykład z dokumentacji MySQL https://dev.mysql.com/doc/refman/5.5/en/loop.html również dostaję taki sam błąd. Czy ktoś czegoś się tutaj doszukuje?

0

a możesz napisać DOKŁADNIE co chcesz zrobić bo nie mogę załapać. Najlepiej z przykładami

0

OK. Całośc skryptu który mam w tej chwili wygląda tak:

SELECT `radusergroup`.`groupname` INTO @grp FROM `radusergroup` WHERE `username` LIKE 'mlubecki';
SELECT COUNT(*) INTO @rang_num FROM `radgroupallow` WHERE `groupname` LIKE @grp;
SET @i = 0;
label: LOOP
	SELECT `radgroupallow`.`ipfrom`, `radgroupallow`.`ipto` INTO @ip_from, @ip_to FROM `radgroupallow` WHERE `groupname` LIKE @grp LIMIT @i,1; /* Tak wiem, tutaj @i w LIMIT nie zadziała ale narazie chodzi o samą pętle  */
	SET @i = @i + 1;
	IF @i > @rang_num
		LEAVE label;
	END IF;
END LOOP label;

Funkcja ma wypełniać następujący algorytm. Na wejściu dostaję nazwę grupy użytkowników i adres IP, następnie przeszukuję tabelę i wyciąga z niej wszystkie rekordy dla podanej nazwy grupy. Następnie sprawdza czy adres IP na wejściu zawiera się w którymś z zakresów zapisanych w bazie. Problem polega na tym, że całość ma umożliwiać dodanie dowolnie dużej ilości zakresów dlatego nie można tego zrobić na sztywno ale przy pomocy jakieś pętli

0

ja masz zapisywane adresy IP? zawsze trzy cyfry czy nie? Jeśli do 3 to zadziała coś takiego

WHERE '192.168.000.026' BETWEEN '192.168.000.001' AND '192.168.000.063'

zamiast pętli (gdzie po between wstawiasz ipfrom i ipto). Do tego indeks na polu z adresem i bez żadnych dziwnych procedur.
BTW używanie LIKE w tym przypadku (przy porównywaniu groupname wskazuje na błąd w projekcie bazy - jeśli groupname w obu tabelach jest inna to coś tu nie gra).
BTW2 Twój opis jest dość pokrętny - czy po prostu chcesz sprawdzić czy dany adresIp mieści się pomiędzy ipfrom i ipto dla wybranej grupy?

0
abrakadaber napisał(a):

ja masz zapisywane adresy IP? zawsze trzy cyfry czy nie? Jeśli do 3 to zadziała coś takiego

WHERE '192.168.000.026' BETWEEN '192.168.000.001' AND '192.168.000.063'

zamiast pętli (gdzie po between wstawiasz ipfrom i ipto). Do tego indeks na polu z adresem i bez żadnych dziwnych procedur.
BTW używanie LIKE w tym przypadku (przy porównywaniu groupname wskazuje na błąd w projekcie bazy - jeśli groupname w obu tabelach jest inna to coś tu nie gra).
BTW2 Twój opis jest dość pokrętny - czy po prostu chcesz sprawdzić czy dany adresIp mieści się pomiędzy ipfrom i ipto dla wybranej grupy?

Tak dokładnie, tylko tych ipfrom do ipto może być albo 1 albo 2 albo więcej. Adresy ip zapisuje w bazie przy użyciu INET_ATOF dlatego tam jest zapisana tylko liczba INT. Wiem, że LIKE jest nietrafione w tym przypadku ale to tylko na testy. Tak czy inaczej interesuje mnie dlaczego mam takie problemy z uruchomieniem nawet najprostszej pętli. Czy to kwestia konfiguracji serwera MySQL?

0 użytkowników online, w tym zalogowanych: 0, gości: 0