2016-07-24 22 views
2

Ich habe mehrere Felder in einer Datenbank namens p1, p2, p3 und so weiter, sie werden von einer Abfrage namens GetUser zurückgegeben. Ich möchte ihre Werte überprüfen, aber der folgende Code führt zu Fehlern. Ich bin mir sicher, dass meine Formatierung 'GetUser.p # x #' falsch ist, aber ich kann nicht herausfinden, wie es geht. Jede Hilfe würde sehr geschätzt werden.benutze Variable in Feldname in einem cfloop

Ich habe den folgenden Code, der funktioniert ...

<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> 

Natürlich ist dies eine schreckliche Art und Weise, dies zu tun, so wollte ich eine Schleife tun wie wie folgt um das gleiche Ergebnis zu erzielen:

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

Bt dies Fehler aus. Ich versuche zu verstehen, wie ich das erreichen kann.

// Es gibt eine ähnliche Frage, die darauf hinweist, dass queryName ["columnName"] [rowNumber] erforderlich ist. Das ist anders und einfacher.

+0

'getUser ['p0' + x]' ist die Syntax für eine dynamische Variable in Ihrer Abfrage. –

+0

Das sollte "von Ihrer Abfrage" sagen –

+0

Schließen, aber nicht ganz.

  • Beitrag 0 # x #
  • \t Ergebnisse in Fehler: kann nicht werfen [p0] string zu einem Zahlenwert. – mck

    Antwort

    0

    Edited für Klarheit:

    <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> 
    

    Es scheint aus Ihrem Kommentar Sie bedingte Kontrollen wollen auf der Basis der Spalte, die Sie zurückkommen. Unter der Annahme, dass Ihre Spalten konsistent benannt werden, sollte die zurückgegebene Spalte immer der Iteration der Schleife entsprechen. Sie sollten nur so viele Felder durchlaufen, wie Sie haben, und auf diese Weise wird es immer genau das tun, ohne eine 10 oder was auch immer hart codieren zu müssen.

    Anstatt also zu überprüfen, ob der Wert P1 oder P2 ist, die Sie gerade #i# verwenden können, zum Beispiel:

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

    +0

    Ich denke, ich muss klarer sein. Ich habe die folgenden Feldnamen in meiner Tabelle: p0, p1, p2, p3 usw. Ich mache diese Schleife, um die Werte in diesen Feldern in einer Abfrage zu überprüfen. also p # x # sollte getuser.p1, dann getuser.p2 und so weiter überprüfen. p ist keine Variable. Es ist eine Konstante in den Feldnamen. – mck

    +0

    Aktualisierte Antwort. Ich habe ein paar mentale Drähte durchquert und angenommen, dass du aus irgendeinem Grund über Formfelder fährst. – TRose

    +0

    Hi, ich denke es ist noch unklar was ich versuche zu tun. Ich habe die Frage aktualisiert, um genau zu sein, was ich erreichen möchte. Entschuldigung für meinen Mangel an Klarheit. – mck

    1

    OK, bekam es ... die Antwort war:

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

    Matt Busche hatte es fast. getUser ['p0' + x] benötigt o getUser ['p0' & x]

    Vielen Dank!

    +0

    Ist das der vollständige Arbeitscode? In der Regel erfordern dynamische Query-Spaltenreferenzen auch eine Zeilennummer, dh 'queryName [" columnName "] [rowNumber]'. Siehe Beispiel: http://trycf.com/gist/b304d69d93f16b4822a3455118fbc266/acf2016?theme=monokai – Leigh

    +0

    Ja, es ist ein funktionierender Code und unterscheidet sich von dem, der als Duplikat gekennzeichnet ist. – mck

    +0

    Beide Themen fragen, wie dynamisch auf Abfrage-Spalten zugegriffen wird.Die Antwort ist die gleiche: Verwenden Sie assoziative Array-Notation. Zugegeben, in Lucee/Railo können Sie die Nummer der Abfragezeile auslassen. ACF nicht. Das obige Snippet wird nicht kompiliert. Es fehlt das fehlende abschließende CFIF-Tag. – Leigh