Типы ENUM и SET — это особые строковые типы, значения которых выбираются из фиксированного списка значений. Главная разница между ними заключается в том, что значение типа ENUM должно содержать точно одно значение из указанного множества, а тип SET позволяет выбрать нескольких значений одновременно.
В окне редактирования эта разница проявится в том, что редактирование данного типа ENUM будет заключаться в выборе одного значения из выпадающего списка, а редактирование данного типа SET будет заключаться в том, чтобы поставить флажки на нужных пунктах списка.
Вообще-то у типа ENUM никаких особенностей нет. Данное этого типа объявляется в дескрипторе обычным образом, например так:
.tdd$types[1] = "enum('красный', 'желтый', 'зеленый')";?>
А затем выводится в шаблоне:
.tplВы выбрали <?=$dat[1]?> сигнал светофора.
Можно задать значение по умолчанию:
.tdd$types[1] = "enum('красный', 'желтый', 'зеленый') NOT NULL default 'красный'";
Если вы не используете данное типа 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, лучше воспользоваться поисковым запросом.