我如何合并一个过程中 return 多个列的多重查询?

How I can merge multiplicate queries which return multiple columns in a procedure?

我有 2 table 次打电话给患者和事件

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

我想创建一个程序来return用户名和他们的活动名称

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 返回。我能怎么做 ?临时 table?

您不需要使用 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 ;

按用户分组的解决方案事件:

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 ;

您不需要 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 ;