[英]loop result set of MySQL Stored Procedure
這是我的存儲函數,可從多個表中獲取完整地址
DELIMITER $$
CREATE FUNCTION `get_Address` (Id INT)
RETURNS varchar (250)
BEGIN
DECLARE address varchar (250);
DECLARE state varchar (250);
DECLARE gov varchar (250);
DECLARE city varchar (250);
DECLARE hood varchar (250);
DECLARE street varchar (250);
DECLARE building varchar (250);
DECLARE floor varchar (250);
declare cr1 cursor FOR
SELECT
s.state_Name,
g.governorate_Name,
c.city_Name,
h.hood_Name,
st.street_Name,
a.address_Building,
a.address_Floor
FROM
addresses AS a
INNER JOIN
states AS s ON s.state_Id = a.state_Id
INNER JOIN
governorates AS g ON g.governorate_Id = a.governorate_Id
INNER JOIN
cities AS c ON c.city_Id = a.city_Id
INNER JOIN
hoods AS h ON h.hood_Id = a.hood_Id
INNER JOIN
streets AS st ON st.street_Id = a.street_Id
WHERE
a.address_Id = Id;
OPEN cr1;
FETCH cr1 INTO state, gov, city , hood , street, building ,floor;
CLOSE cur1;
RETURN address;
END
我需要得到這樣的東西
address = state + gov + city + hood + street + building + floor;
我需要返回所有結果集並使用PHP創建完整地址,或者循環結果並在MYSQL中創建完整地址並返回varchar
您無法在MySQL中返回結果集,因為我們沒有任何可用的數據類型。
您可以使用
concat_ws(" ",state , gov , city , hood , street , building , floor) as address
直接在查詢中(如果您需要一次)。
如果要多次使用,最好制作一個匯總表
但是這里可能是另一種解決方案:
1)創建一個臨時表
2)獲取結果並將其輸入到臨時表中
3)調用tmp表中的地址
這是我的意思:
DELIMITER $$
DROP PROCEDURE IF EXISTS get_Address$$
CREATE PROCEDURE `get_Address` (IN Id INT)
BEGIN
CREATE TABLE tmp_address(ID INT,address VARCHAR(255));
INSERT INTO tmp_address
SELECT
a.address_Id,
CONCAT_WS(" ",s.state_Name,
g.governorate_Name,
c.city_Name,
h.hood_Name,
st.street_Name,
a.address_Building,
a.address_Floor) as address
FROM
addresses AS a
INNER JOIN
states AS s ON s.state_Id = a.state_Id
INNER JOIN
governorates AS g ON g.governorate_Id = a.governorate_Id
INNER JOIN
cities AS c ON c.city_Id = a.city_Id
INNER JOIN
hoods AS h ON h.hood_Id = a.hood_Id
INNER JOIN
streets AS st ON st.street_Id = a.street_Id
WHERE
a.address_Id = Id;
END$$
DELIMITER ;
希望有幫助! :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.