Фильтрация результатов cfquery

Я редактирую уже существующий код, поэтому этот вопрос сформирован как есть. Я пытаюсь использовать уже существующий запрос и не добавляю дополнительные переменные формы через URL-адрес.

Итак, моя проблема: у меня есть запрос, который выполняется, и этот запрос используется для заполнения двух раскрывающихся списков на странице. Один список - это состояние работы, а другой - фактическое место работы. В начале страницы я хочу, чтобы выпадающее меню имело только отличные результаты от запроса, в настоящее время оно отображает 120+ «AL», 80+ «MN» и т. д. Кроме того, я хочу, чтобы второе выпадающее меню имело только результаты, которые имеют конкретное состояние как их состояние.

Я знаю, что могу сделать это, добавив больше запросов и переменную формы, но мне интересно, есть ли способ просто отфильтровать результаты в cfquery.


person SomeoneRandom    schedule 03.06.2011    source источник
comment
Вы исследовали запрос запросов ColdFusion? help.adobe.com/en_US/ColdFusion/9.0/Developing/   -  person orangepips    schedule 03.06.2011
comment
Я не слышал о них, я буду исследовать их сейчас.   -  person SomeoneRandom    schedule 03.06.2011


Ответы (3)


Вот что я бы сделал. Сначала покажите только выпадающее состояние.

Это было бы проще с некоторым примером кода, но вот пример. Вообще не пробовал, но должно быть нормальное начало. Никогда не помните, как установить выбор обратно на ничего не выбранное...

Первое выпадающее меню

<cfoutput group= "state">
<option value= "#state#">#state#</option>
</cfoutput>

Второй раскрывающийся список (ы)

<cfoutput group= "state" style= "display: none;">
<select id= "#site#" class= "site">
<option>Select a Site</option>
<cfoutput>
<option value= "#site#">#site#</option>
</cfoutput>
</select>
</cfoutput>

Добавьте JavaScript...

$( "#state" ).change( function() {

$( ".site" ).each( function() {
$( this ).selected( '' ).hide();

} );

$( "select[id=" + $( this ).val() + "]" ).show();


} );
person Bradley Moore    schedule 03.06.2011
comment
Я не уверен на 100% в том, что делает этот javascript, так как я все еще новичок в этом. Однако, что касается вашего примечания о том, что сначала нужно показать только раскрывающееся состояние, это то, что я делаю. В настоящее время я использовал переменную формы, которая использовалась только для перехода во 2-е раскрывающееся меню. Мне было интересно, какой простой способ был проверить в coldfusion, если в раскрывающемся списке выбран элемент. Таким образом, поскольку раскрывающийся список состояний уже отключает переменную формы, я могу просто проверить этот список, чтобы убедиться, что выбранное значение не пусто, а затем отобразить его таким образом. - person SomeoneRandom; 03.06.2011

+1 к другому ответу для первого раскрывающегося списка - просто сгруппируйте вывод (убедитесь, что запрос правильно упорядочен).

Для второго раскрывающегося списка — используйте cfselect и посмотрите на атрибут привязки — вы можете «привязать» его к первому раскрывающемуся списку.

person Aces 'n Eights    schedule 03.06.2011

Это скорее зависит от вашего конкретного дизайна базы данных... (пример MySQL здесь...) Однако, полностью предполагая, что у вас есть поле, которое будет действовать как PK для определения местоположений сайта, например ZipCode (который я использую здесь ...) вы можете просто сбросить свой cfquery в массив, а затем прокрутить его, чтобы получить свои результаты...

    <cffunction name="getDistinct" access="public" returntype="array" hint="Displays a Single Entry based on the ZipCode for this demo ...">

         <cfargument name="ZipCode" required="true" type="string" />

            <cfset var q = "">  
             <cfset var result = arrayNew(2)>
            <cfset i=0> 

            <cfquery name="q" datasource="#variables.dsn#" username="#variables.username#" password="#variables.password#">
                SELECT DISTINCT Site, SiteName, State, ZipCode
                FROM `THETABLE`
                WHERE ZipCode = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.ZipCode#" maxlength="10">
                ORDER BY Site ASC
            </cfquery>

                <cfloop index="i" from="1" to="#q.RecordCount#">
                <cfset result[i][1] = q.ZipCode[i]>
                <cfset result[i][2] = q.Site[i]>
            </cfloop>  

            <cfreturn >
    </cffunction>
person Edward J Beckett    schedule 04.06.2011