как устроить алгоритм PHP

Тема в разделе "PHP", создана пользователем ivankremlin, 28 май 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. ivankremlin

    ivankremlin Постоялец

    Регистр.:
    25 сен 2009
    Сообщения:
    68
    Симпатии:
    2
    Есть глоссарий. У определения будет автор, должность, фото и само определение. Т.е. все данные про определение и пользователя в разных полях (имя отдельно, должность тоже, фото тоже и т.п.) Возникают ситуации, что появляются дополнения к существующему определению от других авторов. Как можно более правильно сделать это, автоматизировать?
    Как вариант, который я и вижу, редактировать описание, где будет вставляться как в новостях фото, должность, автор, описание. Ниже второе, третье и т.д.
    Если заменять, то тоже некорректно, т.к. два определения более правильно и полноценно отражают суть. Убрать старое - тоже не выход (если старое актуально).
     
  2. Virtual

    Virtual Создатель

    Регистр.:
    17 фев 2007
    Сообщения:
    35
    Симпатии:
    9
    Я бы делал так: мухи отдельно, котлеты отдельно.
    Т.е. имеем таблицу авторов, таблицу терминов, и таблицу определений. У всех есть свой айди. И, еще одну таблицу, связей. Где указывалось бы айди автора, айди термина, и ид определения. Т.е. автор - Иванов, ид=1, термин - www, ид=1, значение world wide web, ид=1. И в таблице связей - 3 поля.

    Таким образом, получится всевозможный набор комбинаций. У любого определения может быть неограниченное количество авторов, и значений.
    Зная айди термина - можно вытащить всех авторов, и все определения. Вобщем, в таком случае, данными можно вертеть как угодно.

    Как-то так.
     
  3. ivankremlin

    ivankremlin Постоялец

    Регистр.:
    25 сен 2009
    Сообщения:
    68
    Симпатии:
    2
    вроде все понятно и ничего не понятно. ПОлучается, что определение может быть пустым. Нужно сначала его создать, потом определение привязать к нему и еще потом автора к нему же. Муторно. И как это все в админке будет гулять? Не понимаю....
    вот пример: http://www.glossostav.ru/0/
    а вот один автор: http://www.glossostav.ru/word/2271/
     
  4. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Так а в чем проблема? Сортируй по дате добавления в базу и всего делов. Будут у тебя несколько определений на одно слово, а скрипт, который их выводит - что-то типа glossary.php?word=электричество.

    Если не хочешь со словами - заведи еще parent у всех "вторичных" записей, и при добавлении нового описания тогда смотри - если слова такого в базе еще нет - то просто добавляем, если есть - узнаем его id и дописываем себе. И тогда по glossary.php?id=21 мы выводим сначала запись с id=21, а потом всех "последователей". Тоже отсортированых по дате.

    Virtual, конечно, дело говорит, но затрахаешься ты с такой базой по самое небалуйся. Я за то чтоб все в одной таблице держать, а если надо там по автору вызвать - запускать glossary.php?author=Эдуард_Михайлов или там glossary_php?date=2008-01-21

    Так в сто раз проще все, хоть и "некошерно".

    Будет нужна авторизация на сайте - заведешь отдельно табличку users(id,имя,должность,фото) и соберешь их всех из глоссария туда, а в глоссарий соответственно users_id вставишь на их место. Тогда уже при выводе на экран JOIN придется делать, что тоже в принципе само по себе не проблема, пока записей не много. Тоже, короче, ничего сложного.

    Отдельно выносить еще и words от описания - ну не знаю. Тоже можно, но мне было бы лень, я бы все в одну таблицу запихнул и не парился. Все равно в вебдеве никто базы в третьей НФ не держит. Не потому что не умеет нормализировать, и не для того чтобы позлить препода по СУБД, а просто жизнь такая, увы.
     
  5. ivankremlin

    ivankremlin Постоялец

    Регистр.:
    25 сен 2009
    Сообщения:
    68
    Симпатии:
    2
    ну а, если слово есть уже такое и определение... Автор его дополняет. Как тогда в этом случае добавить определение и автора с его данными, как в примере?
     
  6. Virtual

    Virtual Создатель

    Регистр.:
    17 фев 2007
    Сообщения:
    35
    Симпатии:
    9
    А блин. Теперь понятен вопрос. :) Оно ведь уже все реализовано. Гуд. В случае дополнения другим автором - я так понял, выглядеть должно примерно как в жж треды, так? :)
    тогда, просто у записи, я бы сделал одно дополнительное поле.. :) У каждой строки есть свой айди, так? вот и сделал бы поле - парент.
    Тоесть, имеем определение 1 автор - Вася, айди у него 15, парент=0. все красиво выводится. Затем, Петя хочет дополнить именно это опредедение. Создает новое, и т.к. он дополняет Васино определение - автоматом вставляется парент=15, и получается новое определение, у которого айди=23.
    Так же, Коля хочет дополнить Петино определение - создает новое, и уже автоматом парент становится 23...

    Можно подумать, и сделать более оптимально, в плане работы с базой - возможно добавить дополнительные поля, по которым оптимально и быстро все вытаскивать.
    А если сам автор дополняет свое же определение - то просто редактировать уже существующую запись. Либо, дать возможность выбора автору. Отредактировать, или дополнить, создав новое определение, и в качестве парента - указав первое определение. В таком случае, при выводе - проверять авторов. Если идет несколько определений подряд - и автор один - то выводить автора только 1 раз.
     
  7. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Во-во, а я предлагаю сделать ключ по слову, и проблема отпадет сама собой. :) Запросили определения такого-то слова - выводим в порядке даты все, которые нашли. Их там хоть один, хоть сто, у всех в поле word стоит наше слово, определениями которого они являются. Проще некуда.
     
  8. Virtual

    Virtual Создатель

    Регистр.:
    17 фев 2007
    Сообщения:
    35
    Симпатии:
    9
    С датой - не получится. :)
    Ибо, в условии: "Возникают ситуации, что появляются дополнения к существующему определению от других авторов."

    Тоесть, есть термин, и 3 определения от трех авторов. С датой, все дела. Затем, появляется четвертый автор, который желает дополнить первое определение. Если использовать только дату - то это определение будет четвертым. А должно быть - вторым. :) Не взирая на то, что появилось последним.. Т.к. оно дополняет первое.
    В таком случае, кроме как с парентами - других вариантов я особо и не вижу.
     
Статус темы:
Закрыта.