2015-06-12 229 views
3

所以我有一個JOIN語句,我將在多個地方使用。它本質上找到一個IP地址並將其與中間表中的所述位置相匹配。我需要傳遞兩個變量 - 一個是我的數據庫/模式的前綴,另一個是IP地址本身。
因此使用的是CONCAT()函數以便將它拼合在一起。MySQL將JOIN語句轉換爲存儲過程或函數?

所以此刻我有一個看起來是這樣的一個過程:

CREATE DEFINER=`root`@`%` PROCEDURE `LocationFromIp`(
ipAddress VARCHAR(16), 
clientComp VARCHAR(32) 
) 
BEGIN 

DECLARE test VARCHAR(255); 

SET @networkSql = CONCAT(" 
SET @Location = 
    (SELECT `network`.`Name` 
    FROM `", clientComp, "-settings`.`iptable` AS `iptable` 
    LEFT JOIN `", clientComp, "-settings`.`network` AS `network` 
    ON `network`.`Subnet` = `iptable`.`Subnet` 
    WHERE `iptable`.`IP` = '", ipAddress, "' 
    LIMIT 1); 
"); 

PREPARE test1 FROM @networkSql; 
EXECUTE test1; 

SELECT @Location AS `Location`; 

它返回,但是我想我不知道我怎麼能在聲明中使用這個結果。

SELECT `IPAddress` AS CALL LocationFromIp('clientComp', `IPAddress`) 
(
    SELECT `IPAddress` 
    FROM `clientComp-data`.`tablename` 
    WHERE @date > `Date`; 
) 
GROUP BY `IPAddress` 

以上行不通,但我希望你能理解我的想法!

那我該怎麼做呢?

+0

生病編輯信息,但 - 本質上需要發生什麼是IpAddress變成一個位置,我可以GROUP BY。所以'128.0.0.0'和'128.1.0.0'都可以是'悉尼'。 –

+0

第一個代碼沒有錯誤 - 只是我不知道如何在另一個語句中使用該過程。 - 這有可能嗎? –

回答

0

爲什麼不能調整存儲過程以包含從一開始就需要的所有字段?