2013-05-02 59 views
0

我在MYSQL中創建了一個存儲過程。我將6個輸入傳遞給存儲過程。我有260列有列名finewt_1,finewt_2,finewt_3 .... finewt_260。在存儲過程中傳遞列字段

我的存儲過程是:

Create procedure GetImg($r35 double, 
r36 double, 
$r37 double, 
r38 double, 
$r39 double, 
r40 double) 

begin 

select img_id,img_path, 
((pow((r36-finewt_$r35),2))+(pow((r38-finewt_$r37),2))+(pow((r40-finewt_$r39),2))) as distance from tbl_fine 

end 

當我嘗試從PHP中調用這個存儲過程,它給了我一個錯誤說finewt_ $ R35沒有找到。我想做這樣的計算,如果假設$ r35 = 50我想(r36-finewt_50)。我怎樣才能做到這一點?這只是我的sql語句的一小部分,我必須爲30,000多個圖像執行此操作,所以我不想使用另一個select語句。我怎麼解決這個問題?

我嘗試使用動態SQL還我收到錯誤消息:

Unknown column 'finewt_13' in 'field list' 

我的動態SQL是:

Create procedure GetImg($r35 double, 
    r36 double, 
    $r37 double, 
    r38 double, 
    $r39 double, 
    r40 double) 

    begin 

    Set @s=CONCAT('select img_id,img_path, 
    ((pow((r36-',finewt_$r35,'),2))+(pow((r38-',finewt_$r37,'),2))+(pow((r40-finewt_$r39),2))) as distance from tbl_fine'); 
PREPARE stmt FROM @s; 
    EXECUTE stmt; 


    end 

當我試試這個:

CONCAT(......(pow((r36-finewt_',$r35,'),2))+(pow((r38-finewt_',$r37,')),2)+(pow((r40-finewt_',$r39,'),2))..... 

我得到的錯誤:

Incorrect parameter count in the call to native function 'pow' 
+0

什麼做在PHP中,而不是在一個存儲過程 – 2013-05-02 07:50:45

+0

從PHP我能做到這一點,但我試圖做它使用存儲過程,所以 – user1583647 2013-05-02 07:54:48

回答

0

您需要連接字符串,

CONCAT(r36,'-finewt_',$r35) 

編輯,

CREATE PROCEDURE `sp_my_proc`(reqdTable varchar(50)) 

set @table_name = reqdTable; 
SET @sql_text = concat('SELECT ..blah blah' FROM',@table_name,'WHERE blah blah'); 

PREPARE stmt FROM @sql_text; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

我可以在MySQL中做到這一點? – user1583647 2013-05-02 07:54:20

+0

https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat – shapeshifter 2013-05-02 07:56:15

+0

這隻有在您使用動態SQL進行整個查詢時纔有效。在普通的SQL查詢中,不可能使用變量來指定表名或列名。 – 2013-05-02 08:08:17