1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
463
463
EMPFEHLEN
-
Hallo, liebe Forengemeinde.
Ich steh mal wieder vor einem Problem, und zwar hab ich eine Tabelle welche in Delphi in einem Tree angezeigt wird mit folgendem Aufbau:
ID | PARENTID | PROJECTID | BEZEICHNUNG
1 |0| 19| EG
2 |1| 19| Achse A-D
3 |1| 19| Achse E-G
4 |0| 19| 1. OG
5 |4| 19| Achse A-D
6 |4| 19| Achse E-G
usw.
Und wird demnach als Tree anhand PARENTID so angezeigt wird:
EG
- Achse A-D
- Achse E-G
1.OG
- Achse A-D
- Achse E-G
In einer weiteren Tabelle habe ich jeweils ein Aufmaßblatt mit folgendem Aufbau:
ID | PROJECTID | GRUPPE | BEZEICHNUNG | ABMESSUNGEN
1 | 19 | 2 | Wand 1 | 3,45 * 3,36
2 | 19 | 3 | Wand 2 | 7,31 * 3,36
3 | 19 | 6 | Wand 1 | 2,25 * 1,25
usw.
Nun zu meinem eigentlichen Problem , ich zeige nun mit folgendem SQL-Code die Gruppen an
zu denen noch kein Eintrag in der Aufmaßblatttabelle vorhanden ist.
Störend ist nur, sollte schon zu allen Kindeinträgen (PARENTID <> 0) bsp. im EG , Einträge im Aufmaßblatt vorhanden
sein, so wird dennoch der Elterneintrag (PARENTID = 0) als EG im Tree angezeigt.
Wie bekomme ich es hin, das halt nur Elterneinträge angezeigt werden wo auch Kindereinträge vorhanden sind.
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
SELECT Gruppen.ID, Gruppen.PARENTID, Gruppen.ProjektID, Gruppen.Bezeichnung FROM Gruppen LEFT JOIN ( SELECT DISTINCT Aufmasse.ProjektID, Aufmasse.Gruppe FROM Aufmasse WHERE Aufmasse.ProjektID = 19 ) AS GrAbfrage ON Gruppen.ID = GrAbfrage.Gruppe WHERE GrAbfrage.Gruppe IS NULL AND Gruppen.ProjektID = 19
Vielen Dank schonmal für Eure Hilfestellungen und einen guten Rutsch ins Jahr 2012.Geändert von Yaslaw (27.12.11 um 21:36 Uhr) Grund: SQL-Tags gesetzt und SQL formatiert
-
item: Willkommen im Forum
item: Ich habe mal dein SQL formatiert und in SQL-Tags gesetzt
item: Annahme meinerseits: Es handelt sich um MySQL
item: Ich poste später ein Vorschlag..---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
@Yaslaw
Danke schonmal für Deine Antwort zu meinem Problem.
Zu meinem Code, ich benutze diesen wie gesagt beim programieren in Delphi.
Die Syntax entspricht MySQL.
MfG
-
MySQL-Syntax oder MySQL? Nun, mit Variablen kann man tolle Dinge machen.
Ich liebe solche Denksportaufgaben *g*
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
SELECT grp.*, -- Speichern ob der Block immer noch komplet ist @block_complet := -- prüfen ob ein aufmass vorhanden ist NOT am.gruppe IS NULL -- prüfen ob der gesammte Block bissher komplet war AND @block_completD AS set_block_complet FROM -- Variablen initialisieren (SELECT @block_complet:=TRUE) AS vars, -- Gruppe nach Block und anschliessend nach id absteigend sortiert ( SELECT *, IF(parentid=0, id, parentid) AS block FROM gruppen WHERE projectid = 19 ORDER BY IF(parentid=0, id, parentid), parentid DESC ) AS grp LEFT JOIN aufmasse AS am ON grp.id = am.gruppe AND grp.projectid = am.projectid WHERE -- Falls es sich um ein Parent handelt, das resultat der block-Auswertung, -- ansonsten eine normale Auswertung auf die aufmasse IF(grp.parentid = 0, !@block_complet, am.gruppe IS NULL)
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Danke für Deinen Supi Lösungsvorschlag, leider hab ich wieder ein neues Problem:
Ich kann leider keine Variablen verwenden, da ich doch glatt gestern Abend verwirrender Weise geschrieben hab das ich die MySQL - Syntax benutze. Dabei handelt es sich doch um eine Access-Datenbank auf die mitels ADO zugegriffen wird. Sorry war mein Fehler, wenn man nicht so recht bei der Sache ist, da das liebe Kind mit Magenschmerzen und Übelkeit zukämpfen hatte.
Dennoch hoffe ich das es auch dafür eine Lösung gibt.
MfG
netprog
-
MS Access? oh - also abgespecktes SQL ohne weiterreichende Möglichkeiten. Leider habe ich sehr viel Erfahrung mit MS Access SQL. Unterabfragen sind nur möglich indem man sie einzeln speichert. Komplexere SQL-Funktionen sind nur möglich wenn man sie selber in VBA hinterlegt.
Ich denke es ist einfacher in Delphi die ausgelesen Daten mit einer Schleife nachzuprüfen als das mit MS Access-SQL lösen zu wollen.
Also erweitere dein SQL um die Block-sortierung und FLags für Vollständigkeit und Parent
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
SELECT grp.*, am.gruppe IS NULL AS have_aufmass, grp.parentid=0 AS is_parent FROM gruppen AS grp LEFT JOIN aufmasse AS am ON grp.id = am.gruppe AND grp.projectid = am.projectid WHERE grp.projectid = 19 ORDER BY IIF(grp.parentid=0, grp.id, grp.parentid), parentid DESC LEFTAND grp.projectid = am.projectid;
Diesen dann innerhalb von Delphi mit einer schleife durchgehen. Ich kann kein Delphi, aber so wäre die Logik:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
[block_complet] = true [items] = array() foreach [row] in [rows] -- FLag setzen, dass kein Aufmass vorhanden ist [missung_aufmass] = not [row]![have_aufmass] -- Wenn es kein Parent ist und bisher der Block komplett ist, -- erneut prüfen ob der Block immer noch komplett ist. if not [row]![is_parent] and [block_complet] then [block_complet] = [row]![have_aufmass] else -- Bei einem Parent den Flag übernehmen und den block_complet zurücksetzen [missung_aufmass] = not [block_complet] [block_complet] = true end if -- Falls der Flag gesetzt ist, die ganze Zeile dem Array mit allen unvollständigen Items hinzufügen if [missung_aufmass] then [items].add([row]) end if next [row]
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
@Yaslaw
Danke nochmals für Deine schnelle Unterstützung.
Ich werde das ganze in den nächsten Tagen mal in Ruhe testen und mich dann wieder melden.
Werde mich erstmal um meine Kranke kleine Maus kümmern.
Also bis denn ....
Ähnliche Themen
-
[MSSQL] - Komplexe Abfrage
Von TehQuila im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 04.11.11, 14:18 -
Schwierigkeit bei Komplexe SQL Abfrage
Von thehasso im Forum PHPAntworten: 1Letzter Beitrag: 04.10.10, 17:28 -
Komplexe Abfrage
Von anaya im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 12.02.08, 09:54 -
Komplexe Abfrage in kleiner Datenbank
Von glader im Forum PHPAntworten: 19Letzter Beitrag: 26.04.06, 09:24 -
komplexe Abfrage
Von silverzone im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 02.02.05, 17:33





Zitieren

Login





