簡體   English   中英

存儲過程的循環結果集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM