MySQL 5.5.8 Rückgabewert einer Funktion in einem SQL Statement verwenden

Vandroiy

Mitglied
Hallo Comunity,

mein Problem besteht darin das ich den Rückgabewert einer Funktion in einer where clause weiter verwenden möchte.
Code:
SELECT * from id_history where id in (fnc_getIDs(47));
Wenn ich das Statement ausführe kommt keine Fehlermeldung, mir wird aber auch kein treffer angezeigt.
Die Funktion liefert mir folgende IDs zurück
Code:
Select fnc_getIDs(47);
1,2,3,4,5

Ich freue mich auf jede Idee.

Mit freundlichen Grüßen
 
Hi,

wie bist du auf diese Funktion gekommen? Weder hab ich davon gehört noch kann ich dazu irgendetwas im Netz finden. Falls du die neu definiert hast wär das CREATE-Statement dazu ganz gut.

Grundsätzlich sollten implementierte Funktionen eigentlich wie in deinem Beispiel verwendbar sein.
 
Hallo para_noid,

ja die Funktion habe ich selber definiert. Ich wußte nicht das das Create-Statement dafür so wichtig ist. Aber kein Problem hier ist die Funktion im ganzen.

Code:
DELIMITER $$

CREATE DEFINER=`user`@`%` FUNCTION `fnc_getIDs`(i_ID int) RETURNS varchar(255) CHARSET utf8
    READS SQL DATA
    DETERMINISTIC
BEGIN
    declare parent_id int default null;
    declare var_ID int;
    declare list varchar(355) default "";
    declare level int default 0;
    
    Select d.id
    into var_ID
    from table1 sa, 
    table2 st,
    table3 d
    where 
    sa.id_table2 = st.table2_id
    and st.id_table3 = d.table3_id
    and sa.table1_id = i_ID;
    
    set parent_id := var_ID;
    set level := 0;
	
    while(FIND_IN_SET(parent_id,list)=0)
    do
        if level = 0 then
            set list := concat(list,parent_id);
        else
            set list := concat(list, ',',parent_id);
        end if;
        
        select id_parent
        into parent_id
        from table3
        where table3_id = parent_id
            and id_parent != parent_id;
        set level := level +1;
    end while;

  return(list);
END$$
Und ich habe Sie vorher Ausprobiert und Sie liefiert mir wie gewünscht 1,2,3,4,5 zurück. Ich bin auch der Meinung das man eine Funktion so in einem Statement verwenden kann aber irgendwie funktioniert das bei mir nicht.
Wenn ich die Anweisung so ausprobiere geht das ganze und ich bekomme die Treffer angezeigt die ich gesucht habe.
Code:
SELECT * from id_history where id in (1,2,3,4,5);
 
Die Funktion gibt dir einen String zurück, keine Liste. Das SQL sieht dann also eher so aus.
SQL:
SELECT * from id_history where id in ("1,2,3,4,5");

Du kannst ggf aber mit FIND_IN_SET() anstelle von IN arbeiten, denn dies arbeitet mit einer Liste in String-Form (also einem Set)
SQL:
SELECT * from id_history where FIND_IN_SET(id, fnc_getIDs(47));

Seh ich das richtig? Es geht um eine Tree-Hirarchie?
Dann schau dir mal das folgende an:
MySQL Hierarchie Baum (Adjacency Tree) auslesen
 
Zuletzt bearbeitet von einem Moderator:
Hallo Yaslaw,

ach sowas habe ich mir schon fast gedacht. Dank dir mit "FIND_IN_SET" Funktioniert das ganze so wie es sein soll. Sehr schön.

Und ja es handelt sich um eine Tree-Hirarchie, ich werde mir den link mal genau dazu anschauen.

Dank dir für die Antwort und für den Link.

Mit freundlichen Grüßen
 

Neue Beiträge

Zurück