Vience
9.06.2012, 23:24:53
Witam serdecznie,
Sprawa może błaha, ale mam pewien problem, nie będę się kryć z tym, że moja wiedza z zakresu zapytań SQL jest bardzo podstawowa.
Otóż: w mam tabelę MySQL, w której gromadzę dane o zdjęciach, a wśród nich najistotniejsza informacja - ID poszczególnego zdjęcia oraz pole na numerek ID albumu, w którym zdjęcie się znajduje. Chcę zrobić sobie przeglądarkę zdjęć, która będzie działać również przez AJAXa. Wymyśliłem sobie to tak, że będę wysyłał do skryptu ID bieżąco oglądanego zdjęcia, ID albumu oraz informację czy chcę jechać do tyłu czy do przodu, ten połączy się z bazą i zwróci potrzebne mi dane, a ja już w głównym skrypcie ładnie nimi sobie pokieruję. Niby wszystko proste, ale chciałbym aby skrypt ajaxa zwracał ID najmniejszego zdjęcia związanego z albumem gdy dojdzie do najwyższego i odwrotnie - największe ID kiedy będzie przy najmniejszym. Mógłbym się tym pobawić przez PHP, ale przez MySQL będzie optymalniej jak sądzę.
Z góry serdecznie dziękuję za podpowiedzi.
darko
10.06.2012, 00:44:09
Trzymaj, napisałem Ci funkcję do tego:
/*
-- DROP FUNCTION IF EXISTS getFotoId;
delimiter //
CREATE FUNCTION getFotoId (ID INT) RETURNS INT
BEGIN
DECLARE tmax, tmin, tnext INT;
select max(num), min(num) into tmax, tmin from test;
select num into tnext from test where num > ID limit 1;
return IF(ID >= tmax, tmin, tnext);
END//
*/
-- Użycie
SELECT getFotoId(9) AS fotoid
-- Założenia:
-- test - nazwa tabeli na której wykonujemy zapytanie
-- num - klucz główny Twojej tabeli (id)
Vience
10.06.2012, 20:37:29
Dziękuję serdecznie, poprzerabiałem nieco kod (dodałem parametr ID albumu) i śmiga pięknie! Co prawda, tylko do przodu, ale główną koncepcję jakby już mam, także pogrzebie w funkcji i to rozpracuję. Dziękuję raz jeszcze!
OK, jednak jest problem. Nigdy nie pisałem swoich funkcji w MySQL, także proszę o wyrozumiałość...
Wklepywałem funkcje przzez phpMyAdmin - wszystko pięknie śmigało w testach przez takowego. Jednak kiedy korzystałem z funkcji przez php wyskoczyło function doesn't exist. Co miałbym w takim przypadku zrobić?
darko
11.06.2012, 00:19:20
Najpierw poślij query, które ją utworzy z warunkiem DROP FUNCTION IF EXISTS, być może bez delimiterów.