2017-02-15 1 views
2

Я 2 таблицы называет пациент и событиеКак я могу объединить несколько запросов, которые возвращают несколько столбцов в процедуре?

---------   ---------- 
| users |   | events | 
---------   ---------- 
|user_id|   |event_id| 
|team_id| 1 -n |user_id | 
| .... |   | .... | 
---------   ---------- 

Я хочу, чтобы создать процедуру, чтобы вернуть имя пользователя и имя своего мероприятия в

CREATE PROCEDURE getAll(user_id INT) 
BEGIN 
    DECLARE id_user INT; 
    DECLARE done INT DEFAULT FALSE; 
    DECLARE user CURSOR FOR SELECT user_id FROM users WHERE team_id = id_team; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

    OPEN usuarios; 
    update_loop: LOOP 
    FETCH user INTO id_patient; 

    IF done THEN 
     LEAVE update_loop; 
    END IF; 

    SELECT name FROM users WHERE user_id = id_user; 
    SELECT nameE FROM events WHERE user_id = id_user LIMIT 0,2; 
    END LOOP; 
END 

Я хочу перечислить имя и следующим, имя своего мероприятия, чтобы отправить JSON обратно. Как я могу сделать ? Временная таблица?

ответ

1

Вам не нужно использовать cursor, попробуйте следующее:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS getAll $$ 
CREATE PROCEDURE getAll(user_id INT) 
BEGIN 


SELECT u.user_id,u.name,e.ename FROM users u 
INNER JOIN events e ON e.user_id = u.id_user 
WHERE u.id_user = user_id ; 

END $$ 

DELIMITER ; 

Solution События сгруппированных пользователем:

DELIMITER $$ 

    DROP PROCEDURE IF EXISTS getAll $$ 
    CREATE PROCEDURE getAll(user_id INT) 
    BEGIN 


    SELECT user_id,u.name,GROUP_CONCAT(e.ename SEPARATOR ',') FROM users u 
    INNER JOIN events e ON e.user_id = u.id_user 
    WHERE u.id_user = user_id 
    GROUP BY u.id_user; 

    END $$ 

    DELIMITER ; 
+0

Этот запрос возвращает только одно событие. – monchyrcg

+0

Должен возвращать все события, соответствующие идентификатору пользователя, переданному параметром. –

+0

Каков правильный параметр'team_id 'или'user_id'? –

0

Вам не нужно Procedure. Просто JOIN:

SELECT users.name, events.Ename from users, events 
    WHERE users.user_id=events.user_id 
      AND users.user_id = 52823; 

И 52823 является искомым user_id конечно.

Но тем не менее, можно поставить его в порядке:

DELIMITER // 
CREATE PROCEDURE getAll(in user_id INT) 
BEGIN 
    SELECT users.name, events.Ename from users, events 
     WHERE users.user_id=events.user_id 
       AND users.user_id = user_id; 
END // 
DELIMITER ; 
+1

Полное подключение к обратному декартовому продукту – monchyrcg

+0

Извините, это не то, что вы хотели? Результат формы '(users.name, events.Ename)' такой, что для каждого 'users.name' существует нуль для многих' events.Ename'? В чем проблема с декартовым продуктом? Если это не то, что вы ищете, дает нам более подробную информацию о вашей желаемой итоговой таблице (какой кортеж?). – nCessity

Смежные вопросы