2017-09-12 36 views
0

讓我解釋一下。存儲過程內部的SQL查詢與從PHP執行的SQL不同嗎?

我使用了大量SELECT一句有多個我的PHP代碼中加入。這是很大的,因爲一些連接從第一表(東西一些值取決於像if table1.column_a=1 then alias_b=table2.column_a, if table1.column_a=2 then alias_b=table3.column_b, ...)因爲我從我的html形式發送條件可以動態地改變(有時它可能只是有some_date>='2017/09/01',但它可能會變成更復雜的東西像some_date>='2017/09/01'和(名稱,如J%onsec_name='Doe')...「)。

我接到讓一個存儲過程此查詢的指導和更多的時間,我需要分析這個我不能找到使這個動態查詢某種方式沒有把它串入存儲過程和接收WHERE條件作爲存儲過程parametter(在存儲過程中,我有財產以後像SET @sql = CONCAT('SELECT ... JOIN ... JOIN... WHERE ',param_condition); PREPARE stmt FROM @sql;...")

我的問題是...這是一樣的發送從sql從PHP?

+4

如果您需要發送實際的SQL查詢的部分存儲過程,那麼你做錯了什麼(這將是一個痛苦的調試)。如果你有不同的情況,那麼你可以爲這些情況創建不同的存儲過程,並簡單地調用當時相關的那個。或者,根據輸入變量,使程序本身決定要執行的操作。 –

+0

@MagnusEriksson實際上我正在構建我的PHP代碼中的SQL,但正如我所提到的,我收到了一條指令來創建一個存儲過程。我認爲存儲過程和動態查詢是完全不相關的兩件事情。我的PHP模塊的目標是允許用戶以不同的方式查詢信息,這些信息可能適用於使用where clausule內部的一個或多個標準的任何必要條件。歡迎任何其他方法推薦。謝謝。 – FoxEdu

+0

_「我收到了指令」_--來自誰和爲什麼? –

回答

2

是,準備和從存儲過程執行語句是幾乎一樣從PHP發送查詢。唯一的區別是連接所有塊的工作是在客戶端或MySQL服務器上運行的PHP代碼中完成的。

如果正在構建的查詢的內容依賴於其他表數據,那麼在存儲過程中執行它可能會更好,因此您不需要數據庫和PHP之間的多次往返來獲取所有信息。

但如果它是隻依賴於PHP已經可用的參數,它可能是最好的,構建在PHP中查詢,如果僅僅是因爲(恕我直言)的PHP語法很可能會更容易理解。性能差異應該很小 - 字符串連接對於PHP和MySQL都很簡單。但我通常認爲,不應該在數據庫服務器中完成不依賴於SQL數據的任何事情。