我如何合并一个过程中 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 ;
我有 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 ;