Как объединить два массива в пригодный для использования cfquery или подобное решение? - PullRequest
0 голосов
/ 27 сентября 2019

Этот вопрос довольно сложный, и я думаю, что это лучшее решение.Если у вас есть другое решение, пожалуйста, отправьте его мне.

У меня есть два массива, передаваемых в качестве переменных формы со страницы отчета на страницу печати.Эти массивы создаются по мере того, как пользователь просматривает отчет и проверяет флажки.Мне нужно сделать запрос на основе двух массивов.Один массив содержит числа, другой массив содержит имена таблиц базы данных.Для массива нет предела текущего размера, но я не вижу, чтобы он когда-либо превышал 100 значений, поэтому я могу сказать, что число значений массива в каждом массиве всегда будет одинаковым, но может варьироваться от 1 до 100 значений.Моя проблема заключается в том, что массив таблиц содержит список таблиц со многими повторяющимися значениями.Число, которое идет с каждой таблицей, находится в том же индексе массива таблиц, что и число в массиве чисел, поэтому они совпадают с idex.

Так что-то вроде этого:

NUMBERS {1, 5, 15, 8}

TABLES {THISTAB1, THISTAB1, THISTAB2, THISTAB3}

Есть ли способ объединить эти два в объект, способный к запросу?Я хотел бы иметь возможность сделать что-то вроде этого:

<cfquery>
    SELECT NUMBERS FROM CREATEDQUERY
    WHERE TABLENAME = THISTAB1
</cfquery>

Используя примеры данных, набор результатов должен быть примерно таким:

Results {1,5}

Любые идеи будут очень признательны!

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Я рекомендую использовать структуру с ключами имен таблиц и массивами или списками чисел.Это прямолинейно, но также более эффективно, если есть какие-либо опасения по этому поводу.Исходя из моего опыта, «запрос запроса» очень медленный, поэтому, если вам нужно выполнить цикл и запустить многие из них, тогда это лучший выбор.

<cfset tableData = {} />
<cfloop from="1" to="#arrayLen(tables)#" index="t">
    <cfif not structKeyExists(tableData, tables[t])>
        <cfseet tableData[tables[t]] = [] />
    </cfif>
    <cfset arrayAppend(tableData[tables[t]], numbers[t] />  
</cfloop>

<cfoutput>#tableData[THISTAB1]#</cfoutput>
0 голосов
/ 27 сентября 2019

Решение заключается в следующем, на случай, если кто-то еще столкнется с этой проблемой:

Чтобы создать запрос, у вас должен быть хотя бы один столбец, поэтому я просто добавил пустой.

<cfset newqueryname = QueryNew("anyval", "Integer")> 

Затем добавьте данные массива в виде нового столбца,

<cfset QueryAddColumn(newqueryname, "numbers", "integer", NUMBERS)>
<cfset QueryAddColumn(newqueryname, "tables", "varchar", TABLES)>

Оттуда у вас есть запрос, который вы действительно можете использовать.

    <cfquery name="differentqueryname" dbtype="query">
        select numbers from newqueryname where
        tables = 'TABLE_NAME'
    </cfquery>

Results {1,5}

Я ценю тех, кто нашел время, чтобы ответить, но есть большая проблема с переполнением стека.Я мог бы спросить, как создать простое утверждение if в Java, и 5 человек прокомментировали, сказав, что им нужно больше информации, прежде чем они смогут ответить на вопрос.Какая новая информация была получена, но я смог ответить на этот вопрос?Как бы мне было выгодно объяснить каждую деталь проекта, над которым я работал в течение большей части двух лет, или показать дамп каждого значения в моей базе данных, просто чтобы кто-то мог сказать мне, как использоватьQueryAddColumn?Не все вопросы загадочны, и этот был довольно простым.Подумайте с предоставленной вам информацией, некоторые люди работают с конфиденциальными данными, и в моем случае обмен моим кодом - это самый быстрый способ стать безработным.Я чувствую, что это часто случается при переполнении стека, и 9 раз из 10 я не думаю, что люди пытаются что-то скрыть от вас, они просто пытаются защитить себя.

Надеюсь, это такполезно для кого-то в будущем.

...