Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   построения графа по базе данных (http://forum.oszone.net/showthread.php?t=188249)

IvanBaich 13-10-2010 14:25 1517931

построения графа по базе данных
 
Привет всем! Помогите!) У меня тякая проблема: поставили задачу построения графа по базе данных на SQL. Понимаю, что звучит непонятно, как смогу попытаюсь объяснить) Пусть у нас есть таблица состоящая всего из двух полей: Кто продал и Кому продал. Далее пользователь, например, вводит Иванов и указывает вложенность графа - 3. Мы должны сделать запрос на поиск записей со значением поля Кто продал = Иванов. Пусть их нашлось 2 со значением поля Кому продал - Петров и Сидоров . Далее ищем записи для Петрова и Сидорова(они тоже кому-то что-то продают) и т.д. до той вложенности которую указал пользователь. И необходимо это вывести графически. Думаю более или менее понятно. Может у кого есть какие идеи как это реализовать или может это уже гдето реализовано, подскажите плиииз, очень нужно)

PhilB 13-10-2010 19:41 1518156

Самое банальное что пришло на ум:

Код:

procedure a (глубина, кто_продал_имя, кто_продал_указ); 
        кто_продал_указ - указание на вершину графа(ссылка, номер вершины и.т.п)
begin
if глубина = треб_глубина then exit;
q = "SELECT кому_продал FROM table WHERE Кто_продал = кто_продал_имя;
ar = выполнить(q) и получить массив;
связать вершину кто_продал с вершинами  кому_продал
      (при необходимости добавить вершины  кому_продал в граф);
for i:=1 to размер(ar) do
    a(глубина+1; ar[i]; указание на вершину графа с именем ar[i])
end;


IvanBaich 14-10-2010 13:16 1518660

Блин, спасибо конечно, но можно поподробней, я не профи и что-то не могу в этом разобраться)
ar - что за массив. Да и вообще если это все будет корректно работать, то остается вопрос как рисовать этот граф?)

PhilB 14-10-2010 18:14 1518904

a - рекурсивная процедура
ar - таблица, который получается после обработки и после выполнение sql-запроса, так как запрашиванется один столбец, то это будет по сути массив, его надо преобразовать в массив, он будет содержать данные о том кому_продал, тот кто_продал.
Затем необходимо связать вершину кто_продал с вершинами кому_продал (реализация зависит от представления графа)
Далее для каждого элемента массива рассматриваем кому_продал в качестве кто_продал , т.е вызываем а рекурсивно.
В первый раз вызываем процедуру как а(0, кто_продал, указатель на первую вершину графа)
По графике я и сам не специалист, но построив граф, думаю нарисовать его не проблема.

Надеюсь, так яснее.

IvanBaich 15-10-2010 13:21 1519472

Спасибо буду разбираться, если будут еще вопросы отпишусь, ОК?)


Время: 11:16.

Время: 11:16.
© OSzone.net 2001-