Query - View - Hilfe benötigt
Hallo zusammen,
ich bin etwas in die PHP Programmierung (privat) eingestiegen und habe gerade etwas ein Problem mit dem erstellen einer Abfrage / View.
Eventuell denke ich auch gerade komplett falsch, weswegen ich kurz nachfragen wollte:
Folgende Tabellen sind vorhanden (ich werde diese verkürzt darstellen):
tAuftraege:
auftragsnr (PK)
kdnr
kontaktnr
titel
tAktivitaeten:
aktivnr (PK)
kdnr
auftragsnr
kontaktnr
datum
von
bis
summe
tMaterial
materialnr (PK)
kdnr
auftragsnr
aktivnr
artike
menge
summe
Nun möchte ich gerne eine Ausgabe Query oder View haben, welche alle Aktivitäten aus der Tabelle "tAktivitaten" und alle Materialen aus der Tabelle "tMaterial" anhand der Auftragsnr ausgegeben haben.
Also Beispiel:
Auftragsnr | kdnr | aktivnr | summeaktiv | materialnr | summematerial|
###
Ist dies überhaupt möglich?
Oder wird sowas generell anders besser umgesetzt?
Danke im Voraus.
Grüße
Phil
ich bin etwas in die PHP Programmierung (privat) eingestiegen und habe gerade etwas ein Problem mit dem erstellen einer Abfrage / View.
Eventuell denke ich auch gerade komplett falsch, weswegen ich kurz nachfragen wollte:
Folgende Tabellen sind vorhanden (ich werde diese verkürzt darstellen):
tAuftraege:
auftragsnr (PK)
kdnr
kontaktnr
titel
tAktivitaeten:
aktivnr (PK)
kdnr
auftragsnr
kontaktnr
datum
von
bis
summe
tMaterial
materialnr (PK)
kdnr
auftragsnr
aktivnr
artike
menge
summe
Nun möchte ich gerne eine Ausgabe Query oder View haben, welche alle Aktivitäten aus der Tabelle "tAktivitaten" und alle Materialen aus der Tabelle "tMaterial" anhand der Auftragsnr ausgegeben haben.
Also Beispiel:
Auftragsnr | kdnr | aktivnr | summeaktiv | materialnr | summematerial|
###
Ist dies überhaupt möglich?
Oder wird sowas generell anders besser umgesetzt?
Danke im Voraus.
Grüße
Phil
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 657795
Url: https://administrator.de/contentid/657795
Ausgedruckt am: 04.12.2024 um 08:12 Uhr
14 Kommentare
Neuester Kommentar
Das ist generell möglich, via JOIN's.
Deine Tabellen sind schlecht aufgebaut, es gibt eine Menge von Redundanz, also Spalten, die in allen Tabellen vorhanden sind. Du hast PK's definiert, scheinst diese aber nicht als Foreign Keys zu verwenden. Im übrigen hat das auch nichts mit PHP zu tun, sondern mit SQL.
Deine Tabellen sind schlecht aufgebaut, es gibt eine Menge von Redundanz, also Spalten, die in allen Tabellen vorhanden sind. Du hast PK's definiert, scheinst diese aber nicht als Foreign Keys zu verwenden. Im übrigen hat das auch nichts mit PHP zu tun, sondern mit SQL.
Moin
Wie schon vom Kollegen @akretschmer gesagt, hast du zu viele Redundanzen.
Beispiel tMaterial:
Ich deute das als "Artikelstammdaten". Willst du hier für jeden neuen Auftrag einen neuen Artikel anlegen?
Besser wäre es, in tAuftrag das Feld "tMaterial" einzubinden und dann dorthin zu referenzieren.*
Tabelle tAktivitaet:
Die Kundennummer sowie Kontaktnummer ergibt sich aus dem Auftrag, muss hier also nicht noch einmal eingebunden werden.*
usw.
Nun möchte ich gerne eine Ausgabe Query oder View haben, welche alle Aktivitäten aus der Tabelle "tAktivitaten" und alle Materialen aus der Tabelle "tMaterial" anhand der Auftragsnr ausgegeben haben.
Siehe Beispiel @SlainteMhath
Heute hat der Artikel "Füller" den Grundpreis 5,50 € und es werden 20 Aufträge mit dieser Bezeichnung angelegt.
Übermorgen ändert Hans im Artikel den Preis aus 6,49€. Bei einer reinen Referenz würden nun die 20 "alten" Aufträge plötzlich den neuen Betrag enthalten, obwohl die Kunden zum alten bestellt haben.
Hier wäre es also durchaus sinnvoll, die Preise in den Auftrag zu übernehmen (was i.d.R. auch gemacht wird).
Gruß
em-pie
Folgende Tabellen sind vorhanden (ich werde diese verkürzt darstellen):
tAuftraege:
auftragsnr (PK), kdnr, kontaktnr, titel
tAktivitaeten:
aktivnr (PK), kdnr, auftragsnr, kontaktnr, datum, von, bis, summe
tMaterial
materialnr (PK), kdnr, auftragsnr, aktivnr, artike, menge, summe
tAuftraege:
auftragsnr (PK), kdnr, kontaktnr, titel
tAktivitaeten:
aktivnr (PK), kdnr, auftragsnr, kontaktnr, datum, von, bis, summe
tMaterial
materialnr (PK), kdnr, auftragsnr, aktivnr, artike, menge, summe
Wie schon vom Kollegen @akretschmer gesagt, hast du zu viele Redundanzen.
Beispiel tMaterial:
Ich deute das als "Artikelstammdaten". Willst du hier für jeden neuen Auftrag einen neuen Artikel anlegen?
Besser wäre es, in tAuftrag das Feld "tMaterial" einzubinden und dann dorthin zu referenzieren.*
Tabelle tAktivitaet:
Die Kundennummer sowie Kontaktnummer ergibt sich aus dem Auftrag, muss hier also nicht noch einmal eingebunden werden.*
usw.
Nun möchte ich gerne eine Ausgabe Query oder View haben, welche alle Aktivitäten aus der Tabelle "tAktivitaten" und alle Materialen aus der Tabelle "tMaterial" anhand der Auftragsnr ausgegeben haben.
- Reine PK/ FK-referenzen sind aber nicht immer sinnvoll, sodass Redundanzen durchaus sinnvoll sein können.
Heute hat der Artikel "Füller" den Grundpreis 5,50 € und es werden 20 Aufträge mit dieser Bezeichnung angelegt.
Übermorgen ändert Hans im Artikel den Preis aus 6,49€. Bei einer reinen Referenz würden nun die 20 "alten" Aufträge plötzlich den neuen Betrag enthalten, obwohl die Kunden zum alten bestellt haben.
Hier wäre es also durchaus sinnvoll, die Preise in den Auftrag zu übernehmen (was i.d.R. auch gemacht wird).
Gruß
em-pie
-> Ist dies soweit korrekt?
sieht gut aus.
Wenn ich z.B. das Benötigte Material auch einer Aktivität zuweisen will, dann benötige ich in der Tabelle "tBenoetigtesMaterial" noch ein Feld "aktivnr" mit FK auf die tAktivitaeten. Richtig?
Wenn das eine 1:1 Beziehung ist: ja, wenn 1:n (also eine Aktivität, n Material) brauchst du noch eine Tabelle alatAktivitaetenMaerial
PK(FK(aktivnr), FK(materialnr))
Wenn es z.B. für die "tAktivitaeten" einen anderen Ansprechpartner als für den Auftrag gibt, dann muss in der "tAktivitaeten" zusätzlich noch ein Feld kontaktnr als FK auf die tAnsprechpartner eingefügt werden. Richtig?
Ja, falls 1:1, sonst siehe oben
Sehen soweit gut aus
Willst du Wissen, wer von deinen Mitarbeitern der Ansprechpartner für den Kunden ist, dann mache es anders herum:
Füge bei jedem Kunden das Feld "ansprechpartner" ein. Dort wird dann die Nr. des Ansprechpartners aus der tAnsprechpartner eingesetzt.
Denn es kann ja sein, dass es einen Ansprechpartner für viele Kunden gibt.
Oder du bleibst flexibel und lässt beides zu, kann ja also Nicht-Pflichtfeld definiert werden.
Du willst ja einem Auftrag ein Material zuordnen. Dann wäre es sinnvoller, wenn in der Tabelle "tAuftraege" die Materialnummer enthalten wird, die wiederum dann mit der Nr. aus "tBenoetigtesMaterial" stammt
2.
Wenn es z.B. für die "tAktivitaeten" einen anderen Ansprechpartner als für den Auftrag gibt, dann muss in der "tAktivitaeten" zusätzlich noch ein Feld kontaktnr als FK auf die tAnsprechpartner eingefügt werden. Richtig?
Jo.
1.
Damit die Ansprechpartner den Kunden zugeordnet werden können, benötige ich in der Tabelle tAnsprechpartner das Feld "kundennr" als Foreign Key auf die Tabelle tKunden.
Das ist jetzt Definitionssache: Willst du die Ansprechpartner beim Kunden wissen, passt deine Definition.Damit die Ansprechpartner den Kunden zugeordnet werden können, benötige ich in der Tabelle tAnsprechpartner das Feld "kundennr" als Foreign Key auf die Tabelle tKunden.
Willst du Wissen, wer von deinen Mitarbeitern der Ansprechpartner für den Kunden ist, dann mache es anders herum:
Füge bei jedem Kunden das Feld "ansprechpartner" ein. Dort wird dann die Nr. des Ansprechpartners aus der tAnsprechpartner eingesetzt.
Denn es kann ja sein, dass es einen Ansprechpartner für viele Kunden gibt.
Oder du bleibst flexibel und lässt beides zu, kann ja also Nicht-Pflichtfeld definiert werden.
2.
Damit die Aufträge dem Kunden zugeordnet werden können, benötige ich in der Tabelle tAuftraege das Feld "kundennr" als Foreign Key auf die Tabelle tKunden.
KorrektDamit die Aufträge dem Kunden zugeordnet werden können, benötige ich in der Tabelle tAuftraege das Feld "kundennr" als Foreign Key auf die Tabelle tKunden.
Zusätzlich benötige ich in der "tAuftraege "noch ein Feld "kontaktnr" als Foreign Key auf die Tabelle tAnsprechpartner um den Ansprechpartner für diesen Auftrag zu deklarieren.
Jopp, sofern der Ansprechpartner für einen einzigen Kunden je Auftrag variieren kann - macht man aber meist so, wie du es planst.3.
Damit die Aktivitäten dem Auftrag zugeordnet werden können, benötige ich in der Tabelle "tAktivitaeten" ein Feld "auftragsnr" als Foreign Key auf die Tabelle tAufträge.
Korrekt.Damit die Aktivitäten dem Auftrag zugeordnet werden können, benötige ich in der Tabelle "tAktivitaeten" ein Feld "auftragsnr" als Foreign Key auf die Tabelle tAufträge.
4.
Damit das Benötigte Material dem Auftrag zugeordnet werden kann, benötige ich in der Tabelle "tBenoetigtesMaterial" ein Feld "auftragsnr" als Foreign Key auf die Tabelle tAufträge.
Anders herum.Damit das Benötigte Material dem Auftrag zugeordnet werden kann, benötige ich in der Tabelle "tBenoetigtesMaterial" ein Feld "auftragsnr" als Foreign Key auf die Tabelle tAufträge.
Du willst ja einem Auftrag ein Material zuordnen. Dann wäre es sinnvoller, wenn in der Tabelle "tAuftraege" die Materialnummer enthalten wird, die wiederum dann mit der Nr. aus "tBenoetigtesMaterial" stammt
Nun frage ich mich:
1.
Wenn ich z.B. das Benötigte Material auch einer Aktivität zuweisen will, dann benötige ich in der Tabelle "tBenoetigtesMaterial" noch ein Feld "aktivnr" mit FK auf die tAktivitaeten. Richtig?
Anders herum. In der Aktivität das Feld materialnr einbinden.1.
Wenn ich z.B. das Benötigte Material auch einer Aktivität zuweisen will, dann benötige ich in der Tabelle "tBenoetigtesMaterial" noch ein Feld "aktivnr" mit FK auf die tAktivitaeten. Richtig?
2.
Wenn es z.B. für die "tAktivitaeten" einen anderen Ansprechpartner als für den Auftrag gibt, dann muss in der "tAktivitaeten" zusätzlich noch ein Feld kontaktnr als FK auf die tAnsprechpartner eingefügt werden. Richtig?
Grüße
Phil
Phil
Mhh so wie du es schreibst, weiße ich dem Auftrag ein Artikel zu.
Es kann aber durchaus vorkommen (wird es auf jeden Fall), dass ein Auftrag mehrere Artikel zugewiesen werden (Material).
Für gewöhnlich gibt es einen Auftragskopf, welcher Daten wie Liefer-/ Zahlungsbedingungen, Kundennr., eure Auftragsnummer, die BEstellNr. des Kunden, etc. beinhaltet.Es kann aber durchaus vorkommen (wird es auf jeden Fall), dass ein Auftrag mehrere Artikel zugewiesen werden (Material).
Neben dem Auftragskopf existiert dann eine (weitere) Tabelle, die die einzelnen Positionen eines Auftrags beinhaltet. An diese Position würde dann Artikel, Preis, Liefertermin, etc. hinterlegt werden.
Das könntest du aber auch mit den von dir bereits beschrieben Aktivitäten abfrühstücken...
Mit was für einem Tool und wie stellt ihr diesen Aufbau z.B. grafisch dar? Ich denke, dass Ihr sowas in die Richtung durchführt.
Visual Paradigm https://www.visual-paradigm.com/solution/freeumltool/