Jak zrobic petle LOOP w funkcji czy procedurze MYSQL ?

0

Chcialem zrobic taka funkcje ze jak mam zapytanie np wybierz nazwe i wiek uzytkownika ale jesli ma kilka adresow email pokaz mi liste wszystkich adresow. I w to pole z adresem chcialem wstawic funkcje by wybral z bazy adresow po user id zlaczyl to w jeden string i zwrocil. Ale mecze sie od wczoraj i lipton:

CREATE FUNCTION pokaEmail(userid varchar(10))
                RETURNS TEXT DETERMINISTIC
                BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE a VARCHAR(10);
    DECLARE textowo VARCHAR(10);
    DECLARE cur1 CURSOR FOR SELECT emails FROM table_emailsWHERE user_id = userid
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur1;
    read_loop: LOOP
      FETCH cur1 INTO a;
        IF done THEN
          LEAVE read_loop;
        END IF;

      textowo = CONCAT(' ', a, textowo);

    END LOOP;

    CLOSE cur1;
END

Chyba pokomplikowalem co ?

2

Ale do tego nie potrzebujesz pętli… Wystarczy Ci agregujący SELECT (GROUP_CONCAT) z 1 JOINem oraz GROUP BY

EDIT:

SELECT
  u.name,
  u.age,
  GROUP_CONCAT(DISTINCT e.email)
FROM users AS u
JOIN table_emails AS e
  ON u.id = e.user_id
GROUP BY
  u.name, u.age

Coś w ten deseń. Nie testowane i pisane z pamięci, więc możliwe, że będzie trzeba coś poprawić. Działa

EDIT2:

Jak chcesz spację zamiast przecinka to musisz użyć GROUP_CONCAT(DISTINCT e.email SEPARATOR ' ').

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