2016-05-16 14 views
0

基本的に私次のストアドプロシージャがあります。MySQLのストアドプロシージャ、CONCATで複数の変数を挿入する方法

BEGIN 
SET @query := CONCAT("SELECT *, 
sqrt( 
     (POW(a.Latitude - co.CenterLatitude, 2)* 68.1 * 68.1) + 
     (POW(a.Longitude - co.CenterLongitude, 2) * 53.1 * 53.1) 
) AS distance 
FROM table1 as r 
JOIN table2 as co ON co.field1 = r.field2 
JOIN table3 AS a ON r.field1 = a.field2 
WHERE ",rid); 

PREPARE stmt FROM @query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

END 

をそれ持って通過し、次の:私は渡す必要がある。しかし

IN rid varchar(500), lat double, lon double 

緯度と経度の変数で指定します。私はそれらを設定してクエリに追加しようとしましたが、それを認識していません。これは私が成功していないんしようとしているものです:

BEGIN 
    SET @lat := lat; 
    SET @lon := lon; 
    SET @query := CONCAT("SELECT *, 
    sqrt( 
      (POW(a.Latitude - @lat, 2)* 68.1 * 68.1) + 
      (POW(a.Longitude - @lon, 2) * 53.1 * 53.1) 
    ) AS distance 
    FROM table1 as r 
    JOIN table2 as co ON co.field1 = r.field2 
    JOIN table3 AS a ON r.field1 = a.field2 
    WHERE ",rid); 

    PREPARE stmt FROM @query; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 

    END 

私はこれを実現する方法がわからないです。誰にも何か提案はありますか?前もって感謝します!!

+0

は、あなただけの連結にそれらを含めることができませんでした「除去する」? – Uueerdo

+0

私に例を教えてください。 – lov2code

答えて

3

プリペイドステートメントに?のプレースホルダーを入れ、実行時に値を指定できます。

SET @query := CONCAT("SELECT *, 
sqrt( 
     (POW(a.Latitude - ?, 2)* 68.1 * 68.1) + 
     (POW(a.Longitude - ?, 2) * 53.1 * 53.1) 
) AS distance 
FROM table1 as r 
JOIN table2 as co ON co.field1 = r.field2 
JOIN table3 AS a ON r.field1 = a.field2 
WHERE ",rid); 
PREPARE stmt FROM @query; 
EXECUTE stmt USING @lat, @lon; 
+0

私はこれを試してみましたが、応答時間は以前の8倍くらいです。それはどういう考えですか? – lov2code

+0

途中でお返事ありがとうございます! – lov2code

+0

それを見て、ありがとう!魅力的な作品:) – lov2code

1

あなたがやったようBarmarの答えは私の好み解決策になるだろうが、私の私の最初のコメントが示唆されたものの一例を与えるために...

BEGIN 
SET @query := CONCAT("SELECT *, 
sqrt( 
     (POW(a.Latitude - ", lat, ", 2)* 68.1 * 68.1) + 
     (POW(a.Longitude - ", lon, ", 2) * 53.1 * 53.1) 
) AS distance 
FROM table1 as r 
JOIN table2 as co ON co.field1 = r.field2 
JOIN table3 AS a ON r.field1 = a.field2 
WHERE ",rid); 

PREPARE stmt FROM @query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

END 
関連する問題