當我運行下面的代碼:是否有可能使用cfquery的結果重新綁定sql參數?
<cfquery name="someQuery" result="queryResult" datasource="wetakepictures">
SELECT id
FROM events
WHERE category_id = <cfqueryparam value="1" cfsqltype="cf_sql_integer">
OR title like <cfqueryparam value="%test%" cfsqltype="cf_sql_varchar">
</cfquery>
<cfoutput>
#queryResult.sql# <br />
#ArrayToList(queryResult.sqlparameters)#
</cfoutput>
它輸出:
SELECT id FROM events WHERE category_id = ? OR title like ?
1,%test%
我需要實際的字符串 「SELECT ID FROM事件WHERE CATEGORY_ID = 1或標題LIKE '%測試%'」。
有沒有辦法將參數重新綁定到sql?
---- ----編輯
之所以這樣做,這是分頁結果時,以消除重複的SQL。我願做這樣的事情:
<cftransaction>
<cfquery name='getCount' result='queryResult'>
SELECT count(*)
... conditions that are guarded by <cfif> ...
</cfquery>
<cfquery name='getLimitedRecords'>
#replace(queryResult.sql, 'count(*)', 'id')#
LIMIT ... based on pagination ...
</cfquery>
</cftransaction>
注:我已經看了這個question,並決定使用兩個查詢與MySQL。
爲什麼你需要這樣做?這聽起來像你想做的事情是不可能的,但如果你有一個目標,我們可以幫助你達到這個目標沒有這一步... – 2010-05-03 13:40:20
我想我明白你爲什麼想要做這是因爲我想過這一次。實際上,由於已經有其他更好的解決方案,所以它不是很好的分頁方法。如果您始終需要count(id),則需要緩存幾分鐘,具體取決於這些記錄更改的頻率。第二個查詢也可以緩存用於用戶來回的情況。恕我直言限制+ ofset +如果其他params的順序應該在所有可能的情況下罰款。如果不是,你可以把簡短的說明。你想要達到的目標。 – 2010-05-03 18:22:07
我也不明白cftransaction是什麼。 – 2010-05-03 18:25:41