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`
以上行不通,但我希望你能理解我的想法!
那我該怎麼做呢?
生病編輯信息,但 - 本質上需要發生什麼是IpAddress變成一個位置,我可以GROUP BY。所以'128.0.0.0'和'128.1.0.0'都可以是'悉尼'。 –
第一個代碼沒有錯誤 - 只是我不知道如何在另一個語句中使用該過程。 - 這有可能嗎? –