Как сделать доп.поля?

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.527
Реакции
121
Не знаю куда правильно тему занести, в MySQL или PHP, т.к. есть вопросы и по php и по MySQL.
Подскажите, как сделать доп.поле, которое бы выводилось в нужных категориях?
Идеи такие...
1. В таблице доп.поля должно быть поле с типом массив. В эту запись таблицы (в массив) запихать все id категорий (через "|" или запятую), в которых нужно вывести данное поле.
При заходе в категорию нужно пройтись по всей таблице доп.полей и всем массивам доп.полей и найди id категории, в которая открыта, и вывести все доп.поля, в которых найден id категории. Добавлять id можно чекбоксами.
2. А если наоборот - в записи таблицы категории указывать в массие id полей (такой же массив, но не у доп.поля, а у категории), которые нужно выводить. Но тогда возникает проблема: если категорий много, изменить во всех категориях данный массив (например, удалить id какого-то поля) будет нереально сложно. Проще изменить одно поле.
Как правильнее, может есть другие варианты?
 
Лучше всего сделать три таблицы в Базе, одна с товарами или категориями другая отвечает за названия полей их значение или формат (как угодно), а третия отвечает за значения вбитые в той или иной записи
ну как пример
Код:
Таблица "товары":
    idItem
    NameItem
Таблица "Доп поля"
    id
    name
    defaultValue
    type
Таблица "Значения доп полей"
  idIten
  idField
  value -- здесь может быть ID значения допустим производителя или ещё чего... если они ещё в отдельной базе

Далее можно одни запросом вытащить всё это хозяйство или не сколькими
PHP:
$result = mysql_query ( "select * from `товары`" );
while ( ($row = mysql_fetch_assoc ( $sql )) != false ) {
    $row['uffields'] = getUfFields($iditem);
}
function getUfFields($iditem) {
    $fields = array ();
    $sql = mysql_query ( "select `доп.поля`.`name`, `значения`.`value` from `допполя`, `значения` where `значения`.`idItem`='{$iditem}' " );
    if (is_resource ( $sql ) && mysql_num_rows ( $sql ) > 0) {
        while ( ($row = mysql_fetch_assoc ( $sql )) != false ) {
            $fields[$row['name']] = $row['value'];
        }
    }
    return $fields;
}

Я конечно не спец по MySQL, но кое что знаю, можно и лучше сделать... если хорошо подумать... а так я пример накидал на скорую руку

Ну а чтобы выводилось поле в той или иной категории просто проверяем, заполнено оно или нет, или по имени проверяем
 
Назад
Сверху