За последние 24 часа нас посетил 22271 программист и 1021 робот. Сейчас ищут 640 программистов ...

Категории и подкатегории insert (вставка записи)

Тема в разделе "PHP для новичков", создана пользователем _ne_scaju_, 22 ноя 2020.

  1. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Привет всем :)
    Чуток логики не уловлю, есть категории с родительским parent_id=0 есть подкатегории дочерние для родительского parent_id, хочу сделать вставку записи в базу данных. Хочу чтобы был выбор между вставкой:
    1. Либо вставить родительскую категорию parent_id = 0
    2. Либо вставить дочернюю подкатегории с parent_id=родителя
    3. Объясните мне какая логика должна быть, какие поля формы нужны для вставки?
    В данном случае я пока сделал вставку записей для подкатегорий, выбираю родителя для подкатегории дальше пишу название подкатегории вставляю запись.
    Писать код не нужно, чисто объяснить логику :)
     
    #1 _ne_scaju_, 22 ноя 2020
    Последнее редактирование: 22 ноя 2020
  2. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Указатель на родительскую запись. Больше ничего не нужно.
    Всё остальное только усложнит.
    Всё дерево, если записей немного, можно хранить отдельно.
     
  3. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    т.е. сейчас я так и делаю, типу вида:
    таблица category_id, category_name, parent_id
    при вставке записи:
    PHP:
    1. <p>Родительская категория</p>
    2. <select name="c_parent" class="form-control input-sm">
    3.   <?php foreach ($categoriesList as $category):
    4.        printf("<option value='%s'>%s</option>", $category['parent_id'], $category['category_name']);
    5.        endforeach; ?>
    6.   </select>
    получаю родительскую категорию, и для нее вставляю подкатегорию.
    А как вставить категорию, в этой же форме хотел бы продумать)
     
  4. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Вот примерная таблица. В ней есть всё, что нужно для вывода всего дерева или любой его ветки.
    Код (Text):
    1. id;name;parent_id;
    2. 1;Собрание сочинений;0;
    3. 2;Том 1;1;
    4. 3;Том 2;1;
    5. 4;Том 3;1;
    6. 5;Приложение к тому 3;4;
    7. 6;Дополнение к приложению тома 3;5;
     
    #4 Drunkenmunky, 22 ноя 2020
    Последнее редактирование: 22 ноя 2020
  5. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    ок, пока не понял к чему ты ведешь, мне нужно вывести одним запросом все категории и подкатегории, потом делать запись только для родительской категории?
    Пока не планирую такую вложенность дерева, будет макс. 2 уровня.
    Мне нужно вставить родительскую категорию которая идет с 0-м)))) и так же по выбору вставлять подкатегорию для родительской категории которая с 0-м)))).
     
  6. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    И в чем сложность?
    Покажите на примере таблицы.
    До и после.
     
  7. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    да нет сложности, я же задал вопрос как реализовать, логику объяснить а так, я напишу сам)
     
  8. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Я неправильно объяснил?
     
  9. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Указатель на родительскую запись. Больше ничего не нужно.
    что этим можно понять, для чего указатель, в поле выбора, можно было подробней)
     
    #9 _ne_scaju_, 22 ноя 2020
    Последнее редактирование: 22 ноя 2020
  10. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Тут как с выбором файла для загрузки.
    Дескать, "укажите категорию".
    Так понятней?
     
  11. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    намекаешь на то указать категорию у которой parent_id = 0 и вставлять запись для этой категории?
     
  12. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Намекаю, да.
     
  13. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    я так и сделал)
     
  14. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Так ведь элементарно.
    Усложняем задачу.
    Представим себе, что у некоторой записи несколько родительских записей.
    То есть она может входить в разные категории.
    В этом случае ведущей становится родительская запись. И для этого понадобится отдельная таблица с двумя колонками.
    Где на одну id придется несколько children_id. Звучит нелогично. Но только на первый взгляд.
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.551
    Симпатии:
    1.754
    Брр.... Можно привести пример из жизни, таких категорий. Ну товар в нескольких категориях - я понимаю. А категория сразу в нескольких родительских - ни разу не видел, ни мне такую задачу не ставили, ни в готовых движках.
     
  16. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Запросто.
    IMDB, Kinopoisk, Litres, Youtube, Ozon ...
    Авторы, актеры, жанры, серии, плейлисты и т.д.
    Это всё разновидности одного и того же.
    Если хотите, могу дать ссылку на рабочую базу для ознакомления.
     
  17. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.790
    Симпатии:
    649
    Не частый пользователь перечисленного. Но хотелось бы потыкать именно по ссылкам этих сайтов, где такое есть. Может, попутал с иерархиями по разным признакам/просто разными иерархиями?

    И, кстати, Хде ТС просил усложнять таким образом? :)
     
  18. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    То есть дерево категорий - не иерархия?Да?
    Тогда попутал. Действительно.
    Опять оффтоплю? Безобразие. Непорядок.
     
  19. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    мне бессмысленно усложнять задачу, т.к. задача с которой мне нужно справится это дерево вложенность 2 уровня, в принципе если добавлять запись для родительской категории, это я уже давно реализовал)
    Ладно для вставки новой родительской категории сделаю еще одну форму, и там буду делать вставку.
     
  20. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.551
    Симпатии:
    1.754
    Ну жанр, который поджанр двух жанров могу представить. А актёры - подактёры - это что-то оооочень странное. Хотя понятно, что у один актёр - фильм - это многие ко многим, но это не совсем тоже самое, что категория - подкатегория.
     
  21. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Имя-псевдоним
    Например.
    Некий писатель под одним именем пишет фантастику, под другим детективы, а под настоящим трактаты по математике.
     
    #21 Drunkenmunky, 23 ноя 2020
    Последнее редактирование: 23 ноя 2020
  22. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.790
    Симпатии:
    649
    Какой-то мутный пример. Переверни и будет обычная иерархия. Когда ты завел песнь про двух родителей, я сразу представил генеалогию с папами и мамами. Дай такой пример, чтобы сразу все было понятно.
    --- Добавлено ---
    Проще не различать. И для категории и для подкатегориий передавай родителя. В форме можешь «общего предка» дефолтом выставить, чтобы не выбирать его явно при создании категорий.
    --- Добавлено ---
    Или можно по «местоположению формы» так даже категорию при создании подкатегоии выставлять. Типа если открыл форму в рамках конкретной категории, она автоматом выставляется, как родительская. Код один и тот же, просто начальное содержимое формы будет от точки доступа зависеть.
     
  23. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.790
    Симпатии:
    649
    Вот сохранилась демка, которую я когда-то слепил для одного пользователя с серча:
    g09.ru/items (только на странице /items вместо списка выводи ту же форму, что и на /items/элемент, но с «общим предком», выбранным дефолтом).
    --- Добавлено ---
    Можно даже выбор в форме не использовать. Просто устанавливать родителя в скрытое поле формы, или брать его прямо в обработчике формы, если точки доступа наследуются в адресах обработчиков.
     
  24. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    ОК. Даю четкий пример. Чисто конкретный.
    На примере издательских и авторских серий книг.
    Одна и та же книга может быть в составе издательской серии. При этом находиться в авторском цикле.
    Конкретный пример - приложение издательства журнала "Огонек", Серия "Шерлок Холмс".
    Это первое, что выдал мне поиск на локалке.
    Во вложении небольшой, тысячи три, список книг, входящих более, чем в две серии, авторских или издательских.
    Там же ссылка на страницу книги в одной из библиотек.
     

    Вложения:

    • books.zip
      Размер файла:
      45 КБ
      Просмотров:
      1
  25. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.790
    Симпатии:
    649
    @Drunkenmunky, походу это то, про что тебе выше mkramer писал. «Листья» относятся сразу к нескольким веткам (многие-ко-многим), а сама иерархия веток простая. Типа как в WP: пост может относиться сразу к нескольким рубрикам. Или как везде теги реализуются (но у тегов обычно нет своей многоуровневой иерархии).