делаю разделы. подскажите по структуре базы, способе вывода и т.п.

Тема в разделе "PHP", создана пользователем danneo, 26 фев 2011.

Модераторы: latteo
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.421
    Симпатии:
    109
    Начну с того, что я не профи :)
    Нужно в каталоге фирм в анкете дополнительно выводить информацию про услуги этой фирмы, как отдельный модуль... у нее известен id.
    Модуль услуг будет привязываться к id фирмы.
    Хочу сделать так...
    на анкете выводится:
    сначала раздел "Строительные услуги"
    Ниже выводится подраздел "ремонтные работы"
    ниже выводятся все услуги по этому подразделу, например, починка крана, замена кабелей, ремонт розеток. Все это выводится в виде списка в столбики.
    Далее, ниже всего этого выводится подраздел2 из раздела "Строительные услуги", называется "косметические работы"
    и ниже выводится весь список работ, например, беление потолка, поклейка обоев, укладка плинтуса и т.п.
    И так, все подразделы с их списком работ.
    А ниже идет снова основной раздел, подобный первому "Строительные услуги". Но он уже со своими подразделами в которых есть свои списки.
    Если в каком то основном разделе нет подразделов, то выводятся сразу все списки, без подразделов.

    Вопрос. Как сделать таблицы, какие отдельно, какие с полями для указания parantid? Как привязать списки услуг к разделам, подразделам?
    НУ и каким образом их выводить?
    Нужно ли разносить в разные таблицы главные разделы и подразделы, услуги в отдельную таблицу от подразделов или нет....?
    Также, проблема возникла в том, что не знаю как сделать редактирование анкеты. Фирма должна выбирать все эти услуги галочками. Т.е. при редактировании или добавлении фримы выводятся также все услуги, только рядом с ними еще чекбоксы. Юзер расставляет в нужных галочки и сохраняет.
    Думал, да не получается ничего.
    Ведь есть уже готовые способы, наверно...
     
  2. drawing4

    drawing4

    Регистр.:
    21 ноя 2008
    Сообщения:
    323
    Симпатии:
    37
    Я бы сделал две таблицы.

    1. id, parent_id - для создания структуры услуг
    2. id, название услуги, описание услуги и т.д.

    Соответственно из первой таблицы делаем пункты и подпункты, из второй - выводим о них информацию.
     
  3. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.421
    Симпатии:
    109
    а как сохранить список услуг и пренадлежность их к категории, подкатегории у конкретной фирмы? Какие поля должны быть в таблице анкеты фирмы и в каком виде?
     
  4. drawing4

    drawing4

    Регистр.:
    21 ноя 2008
    Сообщения:
    323
    Симпатии:
    37
    Что значит в каком виде должны быть поля?

    В первой таблице вы указываете какая категория принадлежит к какой подкатегории, если id категории 1 то это самый верх.

    Во второй таблице вы задаете ID услуги, категорию к которой она принадлежит, и остальные поля которые вам нужны.

    Алгоритм.
    Берем любую услугу. Смотрим какая категория (ее ID), далее в цикле проверяем parent_id!=1 ищем к какой категории относится данная категория.

    Возьмите любой движок и посмотрите как там реализовано.
     
  5. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    вообще то несколько наоборот... не может категория принадлежать подкатегории! и утверждение что id категории 1 это самый верх... совсем не факт (parent_id=0 вот это самый верх!)
    Действительно первая таблица должна содержать данные о доступных структурных единицах (категориях, подкатегориях, под-подкатегориях и т.д.).. выглядит приблизительно так:
    id | parent_id | name | description |
    где id - соответственно уникальный индекс записи
    parent_id =0 если это главная категория или parent_id = id_вышестоящей категории, если это подкатегория
    name - название категории
    description - какое либо описание категории
    Предположим цепочка "Строительные работы" -> "ремонтные работы" ->"косметика"
    и цепочка "Строительные работы" -> "ремонтные работы" ->"капитальные работы"
    будут в таблице отображены следующим образом:
    id | parent_id | name | description |
    1 | 0 | Строительные работы |.... |
    2 | 1 | ремонтные работы |...... |
    3 | 2 | косметика |...... |
    4 | 2 | капитальные работы |....... |
     
  6. drawing4

    drawing4

    Регистр.:
    21 ноя 2008
    Сообщения:
    323
    Симпатии:
    37

    Да вы правы.Перетрудился вчера. А по поводу 0 или 1 это не суть важно. Главное что у корневой категории есть свой ID который и надо проверять в скрипте. Т.е. равняется ли ID категории - ID ROOT категории
     
  7. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.421
    Симпатии:
    109
    Вы не о том. Это я знаю как сделать. И тут тоже есть нюанс. Подподкатегория не будет иметь ID главной категории. Но это не особо важно.
    Вопрос бы в другом.
    Как у таблицы фирмы сделать поля, чтобы можно было занести туда все списки услуг, списки категорий, подкатегорий по которым она оказывает услуги. Т.е. услуг может быть сколько угодно. Они выбираются галочками. Как эти все ID этих услуг запихнуть в поля таблицы, например, "firms"?
     
  8. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    Ну подподкатегория должна иметь ID не главной категории, а вышестоящей!
    Делаешь в таблице firms поле: services в него загоняешь массив id услуг из таблицы services которая имеет вид id | id_cat | names | description |
    где:
    где id - соответственно уникальный индекс записи
    id_cat - id категории к которой относятся услуги
    name - название услуги
    description - какое либо описание услуги

    Загонять массив услуг в базу можно функцией serialize(), вытягивать в удобоваримый вид функцией unserialize(). Дальше обрабатывать стандартными функциями РНР...
    Зная ид услуги из базы можно вытянуть ид категории к которой принадлежит услуга, далее зная ид категории можно определить главная она или нет, если не главная, то узнать какая вышестоящая и т.д.
     
  9. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.421
    Симпатии:
    109
    А есть смысл загонять весь массив услуг? Зачем копировать базу и делать переизбыток?
    Не лучше загнать только id тех услуг, где стоит чекбокс?
     
  10. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    Собственно я именно о том массиве и говорил... загонять в поле services только массив тех услуг, которые предоставляет фирма...