SQL UDF: Variable in SELECT verwenden

Pragmata

Cadet 3rd Year
Registriert
Sep. 2008
Beiträge
50
Moin :)

Sitze nun schon seit Stunden fest und komme nicht mehr weiter.
Ich habe die zwei Entitäten Movies & Movie_actors + die Koppelentität movie_actor_starring_in_movies.
In meiner Funktion will ich nun die Namen der Schauspieler die im Movie movieID mitspielen mit Komma getrennt ausgeben

z.B. so: "Jessica Alba, Tom Hanks, Tim Allen"

Problem ist dass meine innere SELECT Abfrage meine Variable i nicht mag. Wenn ich das Script von unten ausführe, erhalte ich keinen Fehler und die Function wird erstellt. Will ich jedoch die Function ausführen crasht mein komplettes phpmyadmin und ich kann mich nicht mehr einlogen, weil irgendwas mit dem Sockel net stimmt -> Neuinstallation.

Erstelle ich eine Variable so:
SET @i = 0;
und will sie im LIMIT verwenden (...LIMIT @i,1) kann ich die Funktion gar nicht erst erstellen.

Wisst ihr ne Lösung? :(

PHP:
DELIMITER //

CREATE FUNCTION getActors( movieID INT )
    RETURNS VARCHAR(1000)
BEGIN
    
    DECLARE numActors INT;
    DECLARE actorStr VARCHAR(1000) DEFAULT '';
    DECLARE aName VARCHAR(200);
    declare i INT default 0;
    
    SET numActors = (SELECT COUNT(*) FROM movie_actor_starring_in_movies WHERE movie_id = movieID );
    
    WHILE i < numActors DO
        SET aName = ( SELECT CONCAT(a.movie_actor_firstname, ' ', a.movie_actor_lastname) 
                      FROM movie_actors a, movie_actor_starring_in_movies s
                      WHERE a.movie_actor_id = s.movie_actor_id and
                            s.movie_id = movieID
                      ORDER BY a.movie_actor_id
                      LIMIT i,1);
        SET actorStr = CONCAT(actorStr, aName, ', ');
        SET i = i+1;
    END WHILE;    
    
    SET actorStr = SUBSTRING(actorStr, 1, LENGTH(actorStr)-2);
    
    RETURN actorStr;
    
END //

DELIMITER ;

Schon mal Danke.
Gruß, Pragmata
 
Oh, sry.
Es handelt sich um MySQL :rolleyes:
Ergänzung ()

Die Recherche hat ergaben, dass das MySQL net kann. Habs nun aber mit nem Cursor gelöst.
 
Zuletzt bearbeitet:
Mach doch das ganze mit einem CURSOR! Dann kannst du deine Spalteneinträge wie eine Variable anwenden!
 
Zurück
Oben