2012-03-07 2 views
3

나는이 코드 블로우가 작동하고 내가 원하는 것을 수행했지만, 더 좋은 똑똑한 방법이 있는지 궁금해하고있었습니다. 코드는 다음과 같습니다.목록의 값을 기반으로 동적으로 쿼리를 생성하는 우아한 방법이 있습니까?

<cfset myList = ValueList(qSeminarWisReg.SeminarWisTitle,",")> 

<cfif ListLen(myList,",") lte 1> 
    <cfquery datasource="#APPLICATION.dataSource#" name="qSeminarWisRegTwo"> 
    SELECT * FROM SeminarWis 
    WHERE SeminarWisID = <cfqueryparam value="#myList#" cfsqltype="cf_sql_integer"> 
    </cfquery> 
<cfelse> 
    <cfquery datasource="#APPLICATION.dataSource#" name="qSeminarWisRegTwo"> 
    SELECT * FROM SeminarWis 
    WHERE 0 = 0 
    AND (SeminarWisID = <cfqueryparam value="100000000" cfsqltype="cf_sql_integer"> 
    <cfloop index = "x" list = "#myList#" delimiters = ","> OR SeminarWisID = #x#</cfloop>) 
    </cfquery> 
</cfif> 

동적으로 생성되는 목록에는 숫자가 들어 있으며 쉼표로 구분됩니다. 이제는이 숫자가 테이블의 고유 키에 해당하므로 사용자가 원하는 모든 행을 동적으로 가져옵니다.

내가 말했듯이,이 작품은,하지만 누군가가 더 잘 알려주는 방법에 대한 조언이 있다면! 귀찮게하는 부분은 OR 문을 사용하기 전에 "1000000"값 (존재하지 않는 값)을 사용해야한다는 것입니다.

답변

10

난 당신이 = 목록을 "true"로하고, IN 연산자를 CFQUERYPARAM을 사용하려는 생각이 만 listLen (myList에) GTE 1

+0

@Leigh 경우, 다시 한 번 작동합니다

SELECT * FROM SeminarWis WHERE SeminarWisID IN ( <cfqueryparam value="#myList#" cfsqltype="cf_sql_integer" list="true" /> ) 

주 , 당신의 대답은 자리에 보인다. –

+0

그것은 아름답고 작동합니다! cfqueryparam의 "list"속성에 대해 알지 못했습니다! 그리고 "IN"진술은 내가 약 해졌지만, 내가 무엇을 찾고 있는지조차 알지 못했습니다! 감사! 좋은 대답. – Amir

+0

@Evik - Lol, 나는 대답하려고했지만 David이 나를 때렸다 (+1). 그래서 저는 신용을 얻을 수 없습니다;) – Leigh

관련 문제