За последние 24 часа нас посетил 15561 программист и 1618 роботов. Сейчас ищут 732 программиста ...

предки и потомки

Тема в разделе "Прочие вопросы по PHP", создана пользователем nikemat, 15 июн 2014.

  1. nikemat

    nikemat Guest

    здравствуйте. есть база со структурой: id, pid, text
    id- № п.п, pid- ссылается на id к которому относится, text- текст.
    1 строка- 1-0-иванов
    надо сделать так чтобы выводил:
    первая линия (относятся к иванову)
    2-1-петров
    3-1-сидоров
    вторая линия (относится к сидорову)
    4-3-кузнецов
    третья линия (относится к кузнецову)
    5-4-смирнов
    соответственно все это выводится для одного и того же пользователя. как реализовать?
     
  2. olegkaz

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

    С нами с:
    21 фев 2013
    Сообщения:
    121
    Симпатии:
    0
    Обычная рекурсия в этом случае.
     
  3. nikemat

    nikemat Guest

    это понятно, но как реализовать в коде?
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    нифига не понятно ) что вывести?

    описание дерева, как ты его показал, называется adjacency list. непонятно только что именно ты от него хочешь.
     
  5. nikemat

    nikemat Guest

    в данном случае для пользователя иванов выводится три линии- как тут прямо:
    первая линия (относятся к иванову)
    2-1-петров
    3-1-сидоров
    вторая линия (относится к сидорову)
    4-3-кузнецов
    третья линия (относится к кузнецову)
    5-4-смирнов
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    иванов - корень всех?
    Код (Text):
    1. SELECT * FROM tree ORDER BY pid, id
    я не шучу )))

    не нравится - сформулируй задачу нормально: что за "линии"? сколько их надо? что будет входящим параметром?
     
  7. nikemat

    nikemat Guest

    вот именно так должен выдавать скрипт, как в тексте.
    т.е.: в первой линии должны выдаваться потомки иванова (pid=1);
    во второй линии- потомки сидорова (ну или все, когда pid=3);
    в третьей линии- потомки кузнецова (pid=4);
    соответственно это все выдается для текста- иванов
    сам текст- перечисление этих линий- должен быть в скрипте
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    и в чем затык?

    Добавлено спустя 8 минут 54 секунды:
    я так и не добился ответа: есть ли входящий параметр (id, количество линий, …?) или надо буквально весь список х*йнуть.

    для Adjacency List нет способа вывести всех потомков заданного узла в один SQL-запрос — понадобится цикл перебора pid.
    но весь список вывести нет проблем: делаешь сортировку какую надо (pid + текст или id) и хватаешь одним селектом! я уже дал этот ответ.

    ты вообще программист? зареган здесь три года назад, может уже знаешь как из базы читать и выводить?
     
  9. nikemat

    nikemat Guest

    да я прогаю на php с 2007 года, я только этим и занимаюсь. просто сам до всего дохожу, не читая мануалов. а когда не получается как надо, после перебора сотни вариантов- начинаю спрашивать на форуме.
    вывод начинается для выбранного юзера (допустим, get=login).
    кароч я так понял что все равно вернулся к задаче трехлетней давности
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    В частном случае для AL может оказаться эффективнее прочитать все 10-20 записей, кешировать и фильтровать их средствами PHP. Через опу, но будет работать и не придется в теорию заныривать.

    А для больших редко изменяемых множеств я бы посоветовал Nested Sets.
     
  11. olegkaz

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

    С нами с:
    21 фев 2013
    Сообщения:
    121
    Симпатии:
    0
    Как можно 7 лет программировать и не читать мануалов?) (facepalm)
     
  12. nikemat

    nikemat Guest

    каждый учится по-своему) например, по математике и английскому еле-еле оценка вытягивалась к тройке)
    учился на чужих скриптах, разбирал, что какая команда делает.
    потом начал подсматривать мануал чтобы правильно написать названия функций. не знаю ни CMS, ни фреймворков. сам все изобретаю с нуля) однако сделал пол-сотни проектов, которые работают по сей день..)
     
  13. olegkaz

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

    С нами с:
    21 фев 2013
    Сообщения:
    121
    Симпатии:
    0
    Мне жаль эти проекты, то есть про шаблоны проектирования ты даже не слышал?
     
  14. nikemat

    nikemat Guest

    неа) не люблю ничего готовое. во всём) это главный принцип жизни. лучше изобрету велосипед- зато свой. и есть проекты, которые я создал сам от и до, в которых работают сейчас сотни пользователей. например- crm
     
  15. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    JQuery не пользуешься совсем?
     
  16. nikemat

    nikemat Guest

    иногда пользуюсь, когда требуется вывести данные без перезагрузки...
     
  17. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Я вот после этого спросил
    AJAX - это только малая часть JQuery, это как раз можно и самому написать.