Как проверить значения из списка значений в coldfusion

У меня есть записи записей emp, которые выглядят так:

name, id, gender, itemvalue
steve, 123, M,    (3,4,5)
bond, 456,  M,    (5,4)
James, 345,   F,  (4,7)

В другой таблице у меня есть ссылки на такие значения элементов:

3='test' 
4='coder'
5='admin'

Теперь в значении записи, как мне проверить одно значение из itemvalues? Например, проверьте, равно ли значение элемента Стива 5 или нет в ColdFusion?

<cfif steve.itemvalue EQ 5>
      do this
<cfelse>
      if not 5 do this
</cfif>  

person TGR    schedule 23.07.2015    source источник
comment
Если вы имеете в виду, что храните список значений в одном столбце базы данных, сделайте себе одолжение — не делайте этого. Хранение списков просто требует проблем (запутанный sql, низкая производительность запросов, проблемы с целостностью данных и т. д.). Вместо этого вам следует нормализовать свои таблицы. Создайте третью таблицу, в которой хранятся соответствующие значения emp + item.   -  person Leigh    schedule 24.07.2015
comment
Кроме того, какую версию CF вы используете: 9, 10 или 11? Что вы пробовали?   -  person Leigh    schedule 24.07.2015


Ответы (1)


Вы можете использовать ListFind() следующим образом:

<cfloop query="getEmployee">
  <cfif findNoCase("steve", getEmployee.name) AND listFind(getEmployee.itemValue, "5">
    do this
  <cfelse>  
    if not 5 do this
  </cfif>
</cfloop>
person Beginner    schedule 24.07.2015
comment
Глядя на ОП, имя не содержит списка значений, а только столбец itemValue. Ничего против ответа, но, как упоминалось в комментариях, хранение списков в столбце БД - очень плохая идея. Обычно это создает больше проблем, чем решает. - person Leigh; 24.07.2015
comment
@Ли Да, я с тобой согласен. Но я добавил этот ответ, поскольку результаты запроса после использования таблицы сопоставления будут такими же, как и для itemValue, если они сгруппированы. - person Beginner; 26.07.2015
comment
Нет, если они специально не отформатировали их в какой-то список с использованием функций SQL. Базовое СОЕДИНЕНИЕ с соединительной таблицей вернет отдельные значения. @TGR - Одна из причин, по которой списки не рекомендуются, заключается в том, что базы данных оптимизированы для работы с наборами (или строками) данных, а НЕ строками с разделителями. Таким образом, использование соединительной таблицы обеспечивает гораздо большую гибкость, чем списки. Например, как бы вы написали запрос а) Найти сотрудников, у которых есть и пункт 4, и пункт 5? или б) Найти сотрудников, у которых есть пункты 4 и 7, но НЕ пункт 1? С соединительной таблицей это просто JOIN. Использование списков, не так много... - person Leigh; 26.07.2015