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

Тема в разделе "Как сделать...", создана пользователем danneo, 18 сен 2012.

  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    Не знаю куда правильно тему занести, в MySQL или PHP, т.к. есть вопросы и по php и по MySQL.
    Подскажите, как сделать доп.поле, которое бы выводилось в нужных категориях?
    Идеи такие...
    1. В таблице доп.поля должно быть поле с типом массив. В эту запись таблицы (в массив) запихать все id категорий (через "|" или запятую), в которых нужно вывести данное поле.
    При заходе в категорию нужно пройтись по всей таблице доп.полей и всем массивам доп.полей и найди id категории, в которая открыта, и вывести все доп.поля, в которых найден id категории. Добавлять id можно чекбоксами.
    2. А если наоборот - в записи таблицы категории указывать в массие id полей (такой же массив, но не у доп.поля, а у категории), которые нужно выводить. Но тогда возникает проблема: если категорий много, изменить во всех категориях данный массив (например, удалить id какого-то поля) будет нереально сложно. Проще изменить одно поле.
    Как правильнее, может есть другие варианты?
     
  2. xiregroup

    xiregroup Писатель

    Регистр.:
    8 сен 2012
    Сообщения:
    2
    Симпатии:
    2
    Лучше всего сделать три таблицы в Базе, одна с товарами или категориями другая отвечает за названия полей их значение или формат (как угодно), а третия отвечает за значения вбитые в той или иной записи
    ну как пример
    Код:
    Таблица "товары":
        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, но кое что знаю, можно и лучше сделать... если хорошо подумать... а так я пример накидал на скорую руку

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