Фильтрация результатов cfquery - PullRequest
1 голос
/ 03 июня 2011

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

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

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

Ответы [ 3 ]

1 голос
/ 03 июня 2011

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

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

Первый выпадающий список

<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();


} );
0 голосов
/ 04 июня 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>
0 голосов
/ 03 июня 2011

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

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

...