2013-12-20 53 views
0

我在目录中获取的所有文件(影像)的查询查找图像

<cfset local.teamBase = "#GetDirectoryFromPath(GetBaseTemplatePath())#teamlogo\"> 
<cfdirectory action="LIST" directory="#local.teamBase#" name="rc.qryTeamLogo"> 

后来我在所有这些文件名循环,跳过那些在使用

<select name="Logo" <cfif deleted>disabled="disabled"</cfif>> 
     <option></option> 
     <cfloop query="rc.qryTeamLogo"> 
     <cfif name EQ mylogo> 
      <option value="#name#" selected>#name#</option> 
     <cfelseif request.objTeam.isUsed(name) EQ 1 OR name EQ "thumbs.db"> 
      <!--- Do not show ---> 
     <cfelse> 
      <option value="#name#">#name#</option> 
     </cfif> 
    </cfloop> 
    </select> 

isUsed()功能看起来像

<cffunction name="isUsed" returntype="boolean" output="false"> 
<cfargument name="logo" required="true" type="string"> 

     <cfquery name="qryUsed" datasource="#application.DSN#"> 
     SELECT logo 
     FROM CCF.team 
     WHERE logo = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#arguments.logo#"> 
     AND  Deleted = 0 
    </cfquery> 

    <cfif qryUsed.recordcount EQ 0> 
     <cfreturn false> 
    </cfif> 

    <cfreturn true> 
</cffunction> 

的问题,这是因为越来越多的文件s被添加,这变得越来越慢。

我真的很喜欢,可以组装整个事情

回答

0

您可以将select盒之前运行一个查询

<cfquery name="qryLogos" datasource="#application.DSN#"> 
SELECT logo 
FROM CCF.team 
WHERE logo IN (<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#valueList(rc.qryTeamLogo.name)#" list="true">) 
AND Deleted = 0 
</cfquery> 

然后设置所有这些标志的到一个数组,并添加了thumbs.db太,所以你有一个检查办法。

<cfset allLogs = listToArray(valueList(qryLogos.logo))> 
<cfset arrayAppend(allLogs,'thumbs.db')> 

,然后改变你的ELSEIF这个

<cfelseif arrayFind(allLogs,name)> 
    <!--- don't display ---> 
+0

我不知道我们有多少价值在谈论这里,但只要记住还有多少价值的'IN'限制子句将接受(依赖于数据库)。一个'IN'子句更适合小的值列表。一旦超出某个特定点,基于表的连接方法通常会提供更好的性能。 – Leigh

0

加载该文件的信息转换成XML单个查询。将XML放入表中并加入。

<cfset local.teamBase = "#GetDirectoryFromPath(GetBaseTemplatePath())#teamlogo\"> 

<cfset local.qryTeamLogo = DirectoryList(local.teamBase, false, "query")> 

<cfsavecontent variable="local.xmlTeamLogo">  
<ul class="xoxo"> 
    <cfoutput query="local.qryTeamLogo">  
     <li><code>#xmlformat(name)#</code></li> 
    </cfoutput> 
</ul> 
</cfsavecontent> 


<cfquery name="local.qryResult"> 
    DECLARE @xmlTeamLogo xml = <cfqueryparam cfsqltype="CF_SQL_varchar" value="#local.xmlTeamLogo#"> 

    SELECT Value AS Name 
    FROM dbo.udfXOXORead(@xmlTeamLogo) 
    WHERE NOT Value IN (
     SELECT Logo 
     FROM CCF.Team WITH (NOLOCK) 
     WHERE Deleted = 0 
     ) 
</cfquery> 

表值函数

create function [dbo].[udfXOXORead](@xmlData xml) 

returns @tblmessage TABLE (
    [value]  nvarchar(max) NULL 
    ) 
as 
begin 
    INSERT INTO @tblMessage 

    SELECT Tbl.Col.value('(code)[1]', 'nvarchar(max)')  AS [value] 
    FROM @xmlData.nodes('/ul/li') Tbl(Col) 

RETURN 
end