2014-11-06 2 views
1

У меня был хороший поиск, чтобы увидеть, было ли что-то похожее на то, что я пытаюсь сделать. Ничто специально не охватывает его, хотя так без дальнейших церемоний.Coldfusion cfloop через checkboxes в cfquery

Я бы хотел, чтобы мой cfloop работал с любым из отмеченных ящиков на странице поиска и отобразил соответствующие результаты, полученные из базы данных. Это то, что я до сих пор:

<cfquery name="joblibrary"> 
    SELECT * 
    FROM tblJobLibraryRoles JOIN tblJobLibraryCategories 
       ON tblJobLibraryRoles.category = tblJobLibraryCategories.id 
    <cfloop list="#form.cbGrade#" index="i"> 
     WHERE grade=<cfqueryparam cfsqltype="cf_sql_varchar" value="#i#"/> 
    </cfloop> 
    ORDER BY category, grade, title, heraRef; 
</cfquery> 

Теперь работает все хорошо, если только один помечена, поэтому я в основном спрашиваю я могу получить этот тип CFLOOP работать так, как я его создал, или я лаяю неправильное дерево?

ответ

5

Вам не нужен цикл. Просто используйте ключевое слово sql «in».

where somefield in (
<cfqueryparam 
cfsqltype="cf_sql_varchar" value="#form.checkboxfield#" 
list="yes"> 
) 

Вам просто нужно что-то сделать, чтобы бороться с ситуацией, когда ящики не проверяются.

+0

Привет, Дэн, я попробую и вернусь к вам. Что касается того, отмечены ли флажки, у меня есть эта конкретная часть запроса, завернутая в оператор if, который проверяет, является ли элемент формы указанным, чтобы покрыть это. – BoBFiSh

+0

В дополнение к моему предыдущему комментарию, я хотел бы отметить, что это сработало фантастически, и утверждение if хорошо относится к проблеме снятия отметки. Еще раз спасибо. – BoBFiSh

1

IN(), конечно, способ справиться с этим (работает также с другими операторами sql), но могут быть моменты, когда вы хотите, чтобы все условия WHERE были полностью определены переменными.

Опять же, IN() является решением здесь, но я продемонстрирую с вашим запросом, как делать то, что вы изначально хотели сделать.

Просто добавьте WHERE 0=0 (или 1 = 1 или aystring = anysamestring. Вы даже можете сказать Where 'trickwhere'='trickwhere', но нет причин, чтобы с ним было многословно) и перебирать остальных с помощью И вместо.

<cfquery name="joblibrary"> 
    SELECT * from tblJobLibraryRoles JOIN tblJobLibraryCategories ON tblJobLibraryRoles.category=tblJobLibraryCategories.id 
    WHERE 0=0 
    <cfloop list="#form.cbGrade#" index="i">AND grade=<cfqueryparam cfsqltype="cf_sql_varchar" value="#i#"/></cfloop> 
    ORDER BY category, grade, title, heraRef; 
</cfquery> 
+1

Благодарим вас за дополнительную информацию. Это может оказаться полезным в будущих запросах, которые я создаю. Благодаря! – BoBFiSh

Смежные вопросы