Gigoloart.inc
Neuer Benutzer
- Beiträge
- 4
Hallo Leute. Ich habe eine Frage und kenne mich mit SQL nicht gut aus.
Hier ist erstmal das Problem, dass ich zu lösen versuche:
ich habe eine Tabelle1 mit n Elementen. Hier fange ich mit meiner Abfrage an. Für jedes Element aus dieser Tabelle mache ich folgendes: (Einfache For Schleife) 1. Finde in der Tabelle2 das Element, dass über einen Schlüssel mit dem Element aus tabelle1 zusammenhängt. Speicherung in einem Array (Einfache Select Abfrage). 2. Finde in Tabelle3 das Element, dass über einen schlüssel mit dem unter 1. gefundenen Element zusammenhängt. Speicherung in einem Array(Wieder einfache Select Abfrage) 3. Finde in Tabelle3 die ElementE (es können n sein) die über koordinaten mit dem unter 2 gefundenen Element zusammenhängt. N-Elemente in einem Array speichern. Fange mit dem ersten davon an. (wieder Loop) 4-n. Jetzt wiederholt sich Nr. 3 bis kein Element mehr existiert, dass über die Koordinaten mit dem letzten element verbunden ist. Abfrage, ob letztes Element zu einer bestimmten Klasse gehört.
-- meine Fragen: 1. wie du siehst können sich hier Baumstrukturen entwickeln, die sehr lang werden können. Wie kann ich geschickt ein programm schreiben, so dass ich nicht für jede der 4-n Schritte ein neues Array erstellen, darin speichern und wieder einen Loop starten muss?? 2. Da die "wurzeln" miteinander verbunden sein können möchte ich verhindern, dass schonmal abgefahrene Elemente nicht nochmal verwendet werden. Wie kann ich das Machen? Evtl eine Prüfung der Tabelle3 mit einer tabelle4(geprüfte elemente) oder dem löschen der daten aus der Tabelle?
und hier ist der bisherige Code:
for rec in (
select (ID)
from v_KVS)
loop
select (id, father_id, nispg_anlagen_id, x1, y1, x2, y2)
From v_Nispg_sicherung
where v_KVS.id = v_nispg_sicherung.nispg_anlagen_id
and Father_ID is not NULL;
--wie speicher ich das Ergebnis in ein array?
for rec in (
select spalte id, father_id, nispg_anlagen_id, x1, y1, x2, y2
from array1)
loop
select (id, table_id, father_id, x1, y1, x2, y2)
from v_View_Netzobjekte
where v_nispg_sicherung.Fahter_ID = v_view_netzobjekte.ID
AND (
(v_Nispg_sicherung.x1 = v_view_netzobjekte.x1
AND v_Nispg_sicherung.y1 = v_view_netzobjekte.y1)
OR
(v_Nispg_sicherung.x2 = v_view_netzobjekte.x2
AND v_Nispg_sicherung.y2 = v_view_netzobjekte.y2)
)
--Hier versuche ich die Koordinaten zu finden, die das Ende des Elements beschreiben.
-- Save this into Array2
Select (id, table_id, father_id, x1, y1, x2, y2)
From v_view_netzobjekte
where array2.x1 = v_view_netzobjekte.x1
and arrey2.y1 = v_viw_netzobjekte.y1 --respectivly the other coordinates
for rec in (
select (id, table_id, father_id, x1, y1, x2, y2)
From Array2)
loop
Select (id, table_id, father_id, x1, y1, x2, y2)
From v_view_netzobjekte
where array2.x1 = v_view_netzobjekte.x1
and arrey2.y1 = v_viw_netzobjekte.y1
-- dieser Loop müsste jetzt solange wiederholtwerden (und jede Schleife kann wieder bis zu n Elemente ausgeben) bis es keine Elemente gibt, die mit den Koordinaten verknüft sind. Da müsste ich aber immer wieder den Loop neu schreiben, da ich nicht weiß wie tief der Baum geht. Gibt es da eine bessere Lösung?
-- Außerdem will ich die bereits durchlafenden Elemente (aus einer Schleife) nicht später nochmal duchlaufen 8theoretisch ist das hier möglich, da die Elemente miteinander verbunden sein können.
Vielen Dank
Hier ist erstmal das Problem, dass ich zu lösen versuche:
ich habe eine Tabelle1 mit n Elementen. Hier fange ich mit meiner Abfrage an. Für jedes Element aus dieser Tabelle mache ich folgendes: (Einfache For Schleife) 1. Finde in der Tabelle2 das Element, dass über einen Schlüssel mit dem Element aus tabelle1 zusammenhängt. Speicherung in einem Array (Einfache Select Abfrage). 2. Finde in Tabelle3 das Element, dass über einen schlüssel mit dem unter 1. gefundenen Element zusammenhängt. Speicherung in einem Array(Wieder einfache Select Abfrage) 3. Finde in Tabelle3 die ElementE (es können n sein) die über koordinaten mit dem unter 2 gefundenen Element zusammenhängt. N-Elemente in einem Array speichern. Fange mit dem ersten davon an. (wieder Loop) 4-n. Jetzt wiederholt sich Nr. 3 bis kein Element mehr existiert, dass über die Koordinaten mit dem letzten element verbunden ist. Abfrage, ob letztes Element zu einer bestimmten Klasse gehört.
-- meine Fragen: 1. wie du siehst können sich hier Baumstrukturen entwickeln, die sehr lang werden können. Wie kann ich geschickt ein programm schreiben, so dass ich nicht für jede der 4-n Schritte ein neues Array erstellen, darin speichern und wieder einen Loop starten muss?? 2. Da die "wurzeln" miteinander verbunden sein können möchte ich verhindern, dass schonmal abgefahrene Elemente nicht nochmal verwendet werden. Wie kann ich das Machen? Evtl eine Prüfung der Tabelle3 mit einer tabelle4(geprüfte elemente) oder dem löschen der daten aus der Tabelle?
und hier ist der bisherige Code:
for rec in (
select (ID)
from v_KVS)
loop
select (id, father_id, nispg_anlagen_id, x1, y1, x2, y2)
From v_Nispg_sicherung
where v_KVS.id = v_nispg_sicherung.nispg_anlagen_id
and Father_ID is not NULL;
--wie speicher ich das Ergebnis in ein array?
for rec in (
select spalte id, father_id, nispg_anlagen_id, x1, y1, x2, y2
from array1)
loop
select (id, table_id, father_id, x1, y1, x2, y2)
from v_View_Netzobjekte
where v_nispg_sicherung.Fahter_ID = v_view_netzobjekte.ID
AND (
(v_Nispg_sicherung.x1 = v_view_netzobjekte.x1
AND v_Nispg_sicherung.y1 = v_view_netzobjekte.y1)
OR
(v_Nispg_sicherung.x2 = v_view_netzobjekte.x2
AND v_Nispg_sicherung.y2 = v_view_netzobjekte.y2)
)
--Hier versuche ich die Koordinaten zu finden, die das Ende des Elements beschreiben.
-- Save this into Array2
Select (id, table_id, father_id, x1, y1, x2, y2)
From v_view_netzobjekte
where array2.x1 = v_view_netzobjekte.x1
and arrey2.y1 = v_viw_netzobjekte.y1 --respectivly the other coordinates
for rec in (
select (id, table_id, father_id, x1, y1, x2, y2)
From Array2)
loop
Select (id, table_id, father_id, x1, y1, x2, y2)
From v_view_netzobjekte
where array2.x1 = v_view_netzobjekte.x1
and arrey2.y1 = v_viw_netzobjekte.y1
-- dieser Loop müsste jetzt solange wiederholtwerden (und jede Schleife kann wieder bis zu n Elemente ausgeben) bis es keine Elemente gibt, die mit den Koordinaten verknüft sind. Da müsste ich aber immer wieder den Loop neu schreiben, da ich nicht weiß wie tief der Baum geht. Gibt es da eine bessere Lösung?
-- Außerdem will ich die bereits durchlafenden Elemente (aus einer Schleife) nicht später nochmal duchlaufen 8theoretisch ist das hier möglich, da die Elemente miteinander verbunden sein können.
Vielen Dank