2010-07-09 126 views
0

我遇到了很多問題,並且知道我可以在這裏得到一些很好的答案!Mysql存儲過程動態查詢

好的有點2部分的問題。
第1部分我正在做一些非常大的數據更新,主要是調整表格。 所以問題是我應該使用一個MySQL存儲過程或像普通的mysql/php。 我目前正處於存儲的產品框架。 的原因是

  • 一)更快
  • b)否超時。

如果有人有任何其他意見,請告訴我。

P.S我們正在談論一大堆數據。喜歡超過150萬行

第二部分。
在存儲過程中,我該如何做一個查詢,只會返回一行,只是給我那一行。此外,查詢有點動態,所以像

SET tag_query = concat('SELECT tag_id FROM tags WHERE tag = "',split_string_temp,'"'); 

任何線索?
我似乎無法找到任何關於此語言的簡單內容!

在此先感謝您的幫助。

理查德

回答

0

你的問題有點模糊,所以我就到你的包含代碼一塊迴應。

如果您想從標籤名稱中獲取tag_id,我會推薦使用存儲的函數而不是存儲過程。

事情是這樣的:

DELIMITER $$ 

DROP FUNCTION IF EXISTS GET_TAG_ID $$ 

CREATE FUNCTION GET_TAG_ID(P_TAG_NAME varchar(255)) RETURNS int 
BEGIN 
    DECLARE v_return_val INT; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_return_val = -1; 

    IF (P_TAG_NAME IS NULL) 
    THEN 
    RETURN NULL; 
    END IF; 

    select tag_id 
    into v_return_val 
    from TAGS 
    where tag = P_TAG_NAME; 

    RETURN v_return_val; 
END $$ 

DELIMITER ; 
+0

啊,存儲的函數mm。謝謝你的幫助。 因此,要回答這個問題,程序和函數之間有什麼區別? – 2010-07-12 08:47:41

+0

函數返回一個值。程序沒有。 – 2010-07-12 13:17:24

+0

感謝最有幫助的 – 2010-07-15 08:16:35

0

更新一次數據(不作爲經常性的工作),我寧願使用GUI管理像phpMyAdmin或SQLyog的發行直接SQL命令(當然是有一個良好的備份!)因爲您可以快速查看結果,無需擔心除主要任務之外的其他事情。

+0

嗯,是的,但它不像一個快速的mysql語句那麼簡單,實際上這是我的第一次嘗試!數據太多,儘管我在一夜之間離開了這些查詢,但他們只獲得了1/7的通過! 通常情況下,我會和你一起去,也許幾個mysql查詢和一個php腳本可以完成這項工作,但不幸的是不適合我! 感謝您的幫助。 理查德 – 2010-07-12 08:50:46