За последние 24 часа нас посетили 22678 программистов и 1721 робот. Сейчас ищут 822 программиста ...

уровень вложенности записи в базе относительно другой

Тема в разделе "Прочие вопросы по PHP", создана пользователем vvsh, 26 сен 2009.

  1. vvsh

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

    С нами с:
    19 май 2009
    Сообщения:
    79
    Симпатии:
    0
    Адрес:
    Беларусь, Минск
    Здравствуйте, пытаюсь реализовать древовидные комментарии, есть такое в таблице комментариев:
    id - айди комментария
    parentID - айди главного (родительского) комментария

    есть такие записи, где parentID = 0 - главный комментарий
    id | parentID
    1 | 0
    2 | 1
    3 | 1
    4 | 2
    5 | 3
    6 | 5

    вот как мне при такой ситуации узнать уровень вложенности, то есть например на каком уровне вложенности находиться айди 6 по отношению к id 1, заранее спасибо
     
  2. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Есть два варианта.

    1. Каждый раз высчитывать его. (пересчитывая всех родителей)
    2. Сделать отдельное поле для уровня вложенности и хранить его там.
    Вычислять для нового элемента просто - уровень вложенности родителя + 1
     
  3. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
  4. vvsh

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

    С нами с:
    19 май 2009
    Сообщения:
    79
    Симпатии:
    0
    Адрес:
    Беларусь, Минск
    я думал над вторым способом, но, если есть 1, зачем использовать второй?)
    вот я немного не догоняю, как сделать первый способ?
     
  5. SDR

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

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    производительность
     
  6. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Тогда уж лучше рекомендовать оригинал в виде

    Redundant Adjacency List
     
  7. vvsh

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

    С нами с:
    19 май 2009
    Сообщения:
    79
    Симпатии:
    0
    Адрес:
    Беларусь, Минск
    да, согласен, так будет быстрее, но мне бы хотелось реализовать именно первым способом
     
  8. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Для первого варианта или рекурсивные запросы или хранимые процедуры.
    или изменить талицу на Nested Sets, Matherialized Path, Redundant Adjacency List.
     
  9. vvsh

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

    С нами с:
    19 май 2009
    Сообщения:
    79
    Симпатии:
    0
    Адрес:
    Беларусь, Минск
    короче я решил сделать второй вариант, спасибо.
    теперь еще вопрос, вот я из базы выбираю комментарии, как мне пронумеровать комментарии, то есть мне надо выбрать номер комментарии по его ид.
    то есть я выбираю такие
    id | name
    1 | 2523 - 1 номер
    5 | 223523 - 2 номер
    19 | 3252523 - 3 номер
    21 | 2523 - 4 номер
    32 | 23523 - 5 номер

    как мне можно получить эти номера
     
  10. SDR

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

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    vvsh
    насколько я знаю без хранимых процедур средствами запроса SQL никак
    но в php можешь счётчик использовать при проходе результата запроса
     
  11. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Брр. Не понял

    Что значит пронумеровать?
    Уровень вложенности и есть номер комментария в текущей ветке
     
  12. vvsh

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

    С нами с:
    19 май 2009
    Сообщения:
    79
    Симпатии:
    0
    Адрес:
    Беларусь, Минск
    SDR, я сделал чуть по-другому, примитивно конечно получилось, но все же.
    спасибо всем за помощь и советы.
     
  13. SDR

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

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    Simpliest
    нулевая строка с результатом, первая строка с результатом, вторая.... ))))))
     
  14. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    А просто "ключ массива +1" религия не поволяет?
     
  15. SDR

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

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    Simpliest
    это если сначала в массив перегнать, а так:

    Код (Text):
    1.  
    2. while($row = mysql_fetch_row($result))
    3. {
    4.    // какой ключ? :)
    5. }
     
  16. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    PHP:
    1. $i=0;
    2. while($row = mysql_fetch_row($result))
    3. {
    4.    // какой ключ? :)
    5.    $i++;
    6.    // ключ равен $i
    7. }
     
  17. SDR

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

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    Simpliest
    ну дык я об этом и говорил:
    тока эт не ключ массива если выражаться корректно ))