AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

verschachtelte Query

Ein Thema von Ykcim · begonnen am 21. Apr 2020 · letzter Beitrag vom 21. Apr 2020
Antwort Antwort
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#1

verschachtelte Query

  Alt 21. Apr 2020, 15:18
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
Hallo Zusammen,

der Titel ist etwas nichtssagend, aber ich wusste nicht, wie ich es prägnant betiteln könnte...

Ich habe eine Tabelle, in der alle Komponenten, die für die Produktion eines Artikel benötigt werden, aufgelistet sind. Bedauerlicher Weise ist diese liste aber mehrdimensional.

ArtikelNr
----Werkzeug-Hauptsatz (für jede mögliche Maschine gibt es einen)
--------Werkzeug-Baugruppe (die Teil des Werkzeug-Hauptsatzes ist) (Es kann aber auch ein Einzelwerkzeug sein, dass zum Werkzeug-Hauptsatz gehört)
------------Einzelwerkzeug (das zur Werkzeug-Baugruppe gehört)

Die Tabelle hat nur 2 relevante Spalten, nämlich STBGNR und STKOMP.
Aussehen tut das Ganze ähnlich diesem Beispiel:

STBGNR----STKOMP
4711--------4711MD06 (ArtikelNr-----WerkzeugHauptsatz)
4711MD06--78945 (WerkzeugHauptsatz-----Baugruppe oder Einzelwerkzeug)
78945-------75523 (Baugruppe-----Einzelwerkzeug)

Es gibt keinerlei Anhaltspunkte in der Nummer, um was es sich handelt. Bis auf der WerkzeugHauptsatz kann alles eine Baugruppe oder ein Einzelerkzeug sein.
Die Tabelle beinhaltet über 200.000 Datensätze.

Ich möchte eine Query schreiben, in der ich alle WerkzeugBaugruppen und Einzelwerkzeuge, die für eine Auswahl an Artikeln benötigt werden, aufgelistet bekomme.

Ich habe dafür keinen Ansatz, den ich hier posten könnte. Aktuell würde ich viele einzelne Query's schreiben, die ich mit dem Ergebnis der vorherigen zusammenbauen würde und dann das Ergebnis aus den Teilergebnissen zusammensetzen müsste. Kein schöner Weg, daher frage ich Euch, ob jemand einen schlaueren aber dennoch performanten Weg kennt.

Vielen Dank für's Mitdenken
Patrick
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
614 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: verschachtelte Query

  Alt 21. Apr 2020, 15:47
Hallo. Die Anzahl der Ebenen ist fix? Also immer drei? Dann könntest Du mit
Code:
JOIN
arbeiten.
Ansonsten gibt es noch die Möglichkeit ne StoredProcedure zu schreiben. Das ist in den meißten Fällen immernoch schneller als zig einzelne Abfragen übers Neztzwerk zu zerren.
Letzte Option, wie oft ändert sich die Tabelle und wie groß ist sie? Bzw, wie oft musst Du zugreifen? Für bestimmte Sachen arbeite ich mit einer lokalen Pufferung der gesamten Tabelle.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: verschachtelte Query

  Alt 21. Apr 2020, 16:03
Hallo Stefan,

die Tabelle verändert sich ständig und die Zugriffe sind sehr variabel.
Ich habe auch feststellen müssen, dass die Levels nicht immer fix 3 sind...

Ich habe jetzt folgenden Ansatz gefunden, der die Anzahl der Query's vielleicht reduziert.

Delphi-Quellcode:
SELECT WH.stbgnr,
       WH.stkomp as HGR, //Hauptgruppe
       BG.stkomp as BGR, //Baugruppe
       UG.stkomp as UGR, //Untergruppe
       WZ.stkomp as EWZ, //Einzelwerkzeug
       RS.stkomp as Rest //Falls es noch ein Level gibt
FROM phstru WH
left join phstru BG on BG.stbgnr=WH.stkomp
left join phstru UG on UG.stbgnr=BG.stkomp
left join phstru WZ on WZ.stbgnr=UG.stkomp
left join phstru RS on RS.stbgnr=WZ.stkomp
where WH.stbgnr like '%10022439SD73//ArtikelNr und MaschinenNr
and wh.tamagr regexp '3100|3500|5100//Materialgruppen, um das Ergebnis einzugrenzen
Damit bekomme ich jedenfalls eine Liste über 5 Spalten, aus den ich mir das Ergebnis zusammenbauen könnte und die Query ist auch noch sehr schnell...
Patrick
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: verschachtelte Query

  Alt 21. Apr 2020, 20:53
Klingt nach unbekannter Verschachtelungstiefe aka Rekursion:

https://phpperformance.de/server/dat...ysql-rekursion
https://www.ptmr.io/blog/hierarchie-...uery-abfragen/
http://www.klempert.de/nested_sets/
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#5

AW: verschachtelte Query

  Alt 21. Apr 2020, 23:20
https://stackoverflow.com/questions/...ecursive-query

SQL-Code:
with recursive temptablename (id, name, parent_id) as (
  select id, name, parent_id
  from products
  where parent_id = 19 -- Initialisierung

  union all
  select p.id, p.name, p.parent_id
  from products p
  inner join temptablename
  on p.parent_id = temptablename.id -- Rekursion

)
select * from temptablename;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (21. Apr 2020 um 23:23 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz