 
Особенности применения типов ENUM и SET (MySQL)
Типы ENUM и SET — это особые строковые типы, значения которых выбираются из фиксированного списка значений. Главная разница между ними заключается в том, что значение типа ENUM должно содержать точно одно значение из указанного множества, а тип SET позволяет выбрать нескольких значений одновременно.
В окне редактирования эта разница проявится в том, что редактирование данного типа ENUM будет заключаться в выборе одного значения из выпадающего списка, а редактирование данного типа SET будет заключаться в том, чтобы поставить флажки на нужных пунктах списка.
Тип ENUM
Вообще-то у типа ENUM никаких особенностей нет. Данное этого типа объявляется в дескрипторе обычным образом, например так:
.tdd
<?php
$types[1] = "enum('красный', 'желтый', 'зеленый')";
?>
А затем выводится в шаблоне:
.tpl
вы выбрали <?php echo $dat[1] ?> сигнал светофора.
Тип SET
Если вы не используете данное типа SET для хранения только одного значения из списка, то выводить данное можно так же, как и для данного типа ENUM.
Однако, в общем случае, когда в одном поле может храниться несколько значений, понадобится дополнительный код, так как выводимое данное будет представлять собой список, элементы которого отделены друг от друга запятыми, например: груша,апельсин.
Допустим мы объявили следующий тип данного:
.tdd
<?php
$types[1] = "set('груша', 'апельсин', 'банан')";
?>
Тогда список можно выводить так:
.tpl
Фрукты, которые я люблю:
<ul>
<?php
$items = explode(",", $dat[1]); // Превратить список в массив
foreach ($items as $item)
echo "<li>$item</li>";
?>
</ul>
Условная выборка по полю типа SET не удобна, так как в pick-запросах проверяется значение поля целиком. В нашем же случае в полях находятся не просто значения, а списки значений.
Поэтому для выборки записей по ключевому полю типа SET, лучше воспользоваться поисковым запросом.
Примечания
- Известный баг MySQL: строчная буква я в полях типа SET и ENUM отображается некорректно. Есть несколько способов решения этой проблемы:
- Во-первых, вместо нее можно использовать прописную букву Я. Но тогда уж лучше вообще все слова писать в верхнем регистре.
- Во-вторых, можно использовать в полях типа SET и ENUM только латинские буквы, а для отображения русского варианта держать массив соответствия. Минус этого варианта – в окне редактирования мы будем видеть латинские буквы.
- И, наконец, третий вариант, который полностью решает эту проблему – применять тип данных select. Этот тип позволяет создавать многоуровневые списки с неограниченным числом вложенных списков (nested lists). Причем, сами списки можно редактировать прямо в окне редактирования.
|