web-dev-qa-db-fra.com

Comment vérifier une valeur nulle à partir de la valeur de retour dans la boucle de requête ColdFusion

<cfloop query="GET_ALL_STUDENTS>
 <cfif #student_id# is  NOT NULL>
 <!--- do something--->
 </cfif>
</cfloop>   

Ci-dessus, comment je boucle ma requête cf qui renvoie une valeur nulle et je veux vérifier si le student_id est nul ou non. C'est ce que j'ai essayé et cela a échoué. Quelqu'un peut-il me dire une meilleure façon?

17
Evlikosh Dawark

Vous pouvez utiliser ifNull () de votre base de données ou similaire. Cependant, dans ColdFusion, les requêtes sont renvoyées sous forme de chaînes. Compte tenu de votre situation, le moyen le plus simple consiste à rechercher une chaîne non vide:

<cfif len(student_id)>

Soit dit en passant, vous n'avez pas besoin des signes dièse à l'intérieur d'une évaluation: uniquement lors de l'utilisation d'une variable comme littéral (comme lors de la sortie)

30
Billy Cravens

Dans Adobe ColdFusion 9, vous pouvez effectuer:

<cfif IsNull(student_id)>
</cfif>

Ou puisque vous faites le contraire:

<cfif NOT IsNull(student_id)>
</cfif>
13
NullyB

Il semble que la requête récupère tous les étudiants, puis passe en revue les enregistrements pour trouver les champs student_id qui sont NULS.

Il serait plus efficace d'écrire une requête qui interroge spécifiquement les enregistrements qui ont student_id IS NULL.

La méthode de saisie de tous les enregistrements de la table des élèves fonctionnera très bien lorsque vous aurez environ 100 élèves. Que se passe-t-il quand il est mis en production et qu'il y a 25 000 étudiants?

3
Scott Jibben

Alors que la classe Java de l'objet CFQuery (coldfusion.sql.QueryTable) renverra une chaîne vide pour toute valeur nulle, sa classe parent coldfusion.sql.Table fournit une méthode getField (ligne, colonne) pour accéder directement aux valeurs de la table de requête, qui renvoient "non défini" si la valeur est nulle. Nous pouvons utiliser IsNull pour identifier le "non défini" donc capable de détecter NULL.

<CFLOOP query="GET_ALL_STUDENTS">
    Row = #CurrentRow#
    <CFIF IsNull(GET_ALL_STUDENTS.getField(GET_ALL_STUDENTS.CurrentRow, GET_ALL_STUDENTS.findColumn('student_id')))>
        [NULL]
    <CFELSE>
        #GET_ALL_STUDENTS.student_id#
    </CFIF>
    <br>
</CFLOOP>

Référence: http://laxmanthota.blogspot.com/2010/11/cfquery-and-underlying-Java-objects.html

0
Pak Chin Wong