PDA

Показать полную графическую версию : построения графа по базе данных


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

PhilB
13-10-2010, 19:41
Самое банальное что пришло на ум:


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

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

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

IvanBaich
15-10-2010, 13:21
Спасибо буду разбираться, если будут еще вопросы отпишусь, ОК?)




© OSzone.net 2001-2012