2

我在名为 p1、p2、p3 等的数据库中有几个字段,它们由名为 GetUser 的查询返回。我想检查它们的值,但下面的代码错误出现在我身上。我确定我的格式“GetUser.p#x#”是错误的,但我不知道该怎么做。任何帮助将非常感激。

我有以下代码,它有效......

    <cfquery name="GetUser"> 
        SELECT id, p00, p01, p02, p03, p04, p05, p06
        FROM users 
        where id = #session.user_id#
    </cfquery>

    <cfoutput query="GetUser">
        <cfif p01 is 1><li>Post 01</li></cfif>
        <cfif p02 is 1><li>Post 02</li></cfif>
        <cfif p03 is 1><li>Post 03</li></cfif>
        <cfif p04 is 1><li>Post 04</li></cfif>
        <cfif p05 is 1><li>Post 05</li></cfif>
        <cfif p06 is 1><li>Post 06</li></cfif>
    </cfoutput>

自然,这是一种糟糕的做法,所以我想做一个如下的循环来达到相同的结果:

    <cfloop index = "x" from = "1" to = "6"> 
        <cfif GetUser.p0#x# is 1><li>Post #x#</li></cfif>
    </cfloop>

Bt 这个错误了。所以我希望了解如何实现这一目标。

// 有一个类似的问题建议queryName["columnName"][rowNumber] 是必填项。这是不同的,而且更简单。

4

2 回答 2

1

好的,明白了……答案是:

 <cfloop index = "x" from = "1" to = "10">
   <cfif getUser['p0' & x] is 1><li> 0#x#</li> </cfif>
 </cfloop>

马特·布歇(Matt Busche)几乎拥有它。getUser['p0' +x] 需要 o 是 getUser['p0' & x]

谢谢!

于 2016-07-24T17:09:46.160 回答
0

为清楚起见进行了编辑:

<cfquery name="getuser"  datasource="STACK">
    Select * from stackoverflow
</cfquery>

<cfset fieldNumber = #ListLen(getuser.ColumnList)#>
<cfoutput>
<cfloop index="i" from="1" to="#fieldNumber#"> 
This is P#i#
</cfloop>
</cfoutput>

从您的评论看来,您需要根据您返回的列进行条件检查。假设您的列命名一致,则返回的列应始终与循环的迭代匹配。您应该只需要遍历尽可能多的字段,这样它就可以始终做到这一点,而无需硬编码 10 或其他任何内容。

因此,您可以使用 ,而不是检查值是 p1 还是 p2 #i#,例如:

<cfif i is 1> P1 is here. </cfif>

于 2016-07-24T06:23:34.613 回答