сопоставление нескольких значений для сравнения входных данных с базой данных? - PullRequest
0 голосов
/ 22 декабря 2011

Мы работаем над внутренней системой инвентаризации. Когда пользователь заказывает товар и товар у поставщика и вводит информацию о заказе, я хочу, чтобы пользовательский ввод brand, model, SKU и т. Д. Был свободным вводом данных, затем при отправке сравнивает все значения для предметов уже в базе данных инвентаризации. Сначала он сравнил бы SKU, если найден, затем его прямое соответствие. Если нет, то он переходит к сравнению model и brand и просит пользователя подтвердить, что это один и тот же элемент.

Есть ли у кого-нибудь идеи о лучших методах достижения этой цели? Я не могу даже думать о том, как это будет называться, чтобы погуглить. Примеры кода / ресурсы приветствуются!

1 Ответ

2 голосов
/ 22 декабря 2011

Предположим, что ваше поле формы называется "orderInfo" и имеет значение "12345 Acme Gadget" (где 12345 - действительный SKU)

<cfquery name="checkSKU" datasource="inventoryDSN">
SELECT 
 * 
FROM 
 Inventory 
WHERE 
 cast(SKU as varchar) IN (<cfqueryparam value="#ListChangeDelims(form.orderInfo, ' ', ',')#" list="true" cfsqltype="cf_sql_varchar">)
</cfquery>

<cfif checkSKU.recordCount>
  <!--- We have a match! --->
<cfelse>

<cfquery name="checkOthers" datasource="inventoryDSN">
SELECT 
 inventory.*
FROM 
 Inventory 
WHERE 
 1=0
 <cfloop list="#form.orderInfo#" delimiters=" " index="searchTerm">
OR brand LIKE <cfqueryparam value="%#searchTerm#%" cfsqltype="cf_sql_varchar">
OR model LIKE <cfqueryparam value="%#searchTerm#%" cfsqltype="cf_sql_varchar">
</cfloop>
</cfquery>

<cfif checkOthers.recordCount IS 1>
  <!--- have a solid match --->
<cfelseif checkOthers.recordCount GT 1>
  <!--- have some ambiguity, present user with choice among returned results --->
<cfelse>
  <!--- No match found, return error message --->
</cfif>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...