Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage über mehrere Tabellen (https://www.delphipraxis.net/77350-sql-abfrage-ueber-mehrere-tabellen.html)

Memo 18. Sep 2006 14:01

Datenbank: MySQL • Version: 5 • Zugriff über: DAC for MySQL

SQL Abfrage über mehrere Tabellen
 
Hallo,

ich komme bei einer SQL Abfrage nicht weiter.
3 Tabellen (stark vereinfacht) habe ich gegeben:

Kunde
id
Name

Kunde_zeit
id - zeigt auf Table Kunde.ID
Nr -zeigt auf Table Wochentag.Nr
Zeit

Wochentag
Nr
Tag


Das Ergebnis sollte eigentlich nur einen Satz pro Kunden enthalten.
Genau da komme ich nicht weiter.

Bsp.
Name----Wochentag-----Zeit-----Wochentag-----Zeit

Kunde1--Montag-------10:20-----Dienstag-----14:18
Kunde2--Mittwoch-----14:20-----Freitag------07:00


Ich habe es nur geschafft, das für jede Zeitangabe eines Kunden jeweils ein einzelner Satz heraus kommt.

Danke für jede Idee.

Jürgen Thomas 18. Sep 2006 14:11

Re: SQL Abfrage über mehrere Tabellen
 
Zitat:

Zitat von Memo
Hallo,

ich komme bei einer SQL Abfrage nicht weiter.
3 Tabellen (stark vereinfacht) habe ich gegeben:

Danke für jede Idee.

Hallo,

mal wieder der Standardkommentar: Meine Glaskugel ist kaputt.

Wie sieht denn die SQL-Abfrage aus?! Der Fehler dürfte im JOIN-Abschnitt liegen. Jürgen

Memo 18. Sep 2006 14:23

Re: SQL Abfrage über mehrere Tabellen
 
Zitat:

Zitat von Jürgen Thomas
mal wieder der Standardkommentar: Meine Glaskugel ist kaputt.

Das tut mir leid.

Aber meine Abfrage passt nicht zu dem simplifizierten Beispiel.
Seis drum. Ich bastle aus meinem vorhandenen Select mal ein Beispiel was zur Vorgabe passt.

//Edit :
vereinfacht würde es dann so aussehen:
SQL-Code:
SELECT
`Kunde`.`ID`,
`Kunde`.`Name`,
`Wochentag`.`Tag`,
`Kunde_zeit`.`Zeit`
FROM
`kunde`
Right Join `Kunde_zeit` ON `Kunde`.`Id` = `Kunde_zeit`.`Id`
Left Join `Wochentag` ON `Kunde_zeit`.`Nr` = `Wochentag`.`Nr`
ORDER BY
`Kunde`.`ID`

shmia 18. Sep 2006 15:05

Re: SQL Abfrage über mehrere Tabellen
 
Irgendwie passt dein Datenmodell nicht so ganz zur Aufgabenstellung (die hier leider unbekannt ist).
Handelt es sich um Besuchstermine / Arzttermine oder so ähnlich?
Bei deinem Modell können zu einem Kunden beliebig viele Zeitpunkte (Wochentag +Uhrzeit) gespeichert werden.
Die Beziehung ist 1 Kunde -> 0..N Zeitpunkte
Du möchstest jetzt aber eine Tabelle, die pro Kunde 2 dieser Angaben enthält.
Das lässt sich aber mit SQL so nicht lösen.
Die Tabelle "Kunde_zeit" müsste schon eine Information tragen, ob die Zeitinfo zum 1. oder zum 2. Zeitpunkt gehört.
Code:
Name----Wochentag1-----Zeit1-----Wochentag2-----Zeit2

Memo 18. Sep 2006 15:26

Re: SQL Abfrage über mehrere Tabellen
 
Zitat:

Zitat von shmia
Irgendwie passt dein Datenmodell nicht so ganz zur Aufgabenstellung (die hier leider unbekannt ist).

Das Datenmodell passt leider zu einer anderen Aufgabenstellung. Ich habe versucht es oben so genau als möglich (ohne viel Drumherum)zu beschreiben.

Zitat:

Handelt es sich um Besuchstermine / Arzttermine oder so ähnlich?
Ja so in der Art. Termine von Mo-So auf einen Blick, wobei es nicht auf 2 begrenzt ist.

Zitat:

Bei deinem Modell können zu einem Kunden beliebig viele Zeitpunkte (Wochentag +Uhrzeit) gespeichert werden.
Die Beziehung ist 1 Kunde -> 0..N Zeitpunkte
Du möchstest jetzt aber eine Tabelle, die pro Kunde 2 dieser Angaben enthält.
Nicht nur zwei, wie du schon bemerkt hast könnten es beliebig viele sein.

Zitat:

Das lässt sich aber mit SQL so nicht lösen.
Das habe ich befürchtet. Ich habe es so gemacht, dass ich mit Delphi durch die Ergebnismenge gelaufen bin und eine neue Tabelle erzeugt habe, die der gewünschten Ansicht entspricht. Das ist leider ein sehr zeitintensiver Vorgang.
Von daher der Versuch es mit SQL zu lösen.

Aber danke für deine Antwort.

mkinzler 18. Sep 2006 15:31

Re: SQL Abfrage über mehrere Tabellen
 
Wiviele Termine pro Kunde sind möglich?

Memo 18. Sep 2006 15:33

Re: SQL Abfrage über mehrere Tabellen
 
Zitat:

Zitat von mkinzler
Wiviele Termine pro Kunde sind möglich?

Ich habe es auf sieben begrenzt.

mkinzler 18. Sep 2006 15:34

Re: SQL Abfrage über mehrere Tabellen
 
Eine sehr Aufwende Möglichkeit wäre über Joins mit verschiedenen Limits.

Memo 18. Sep 2006 15:46

Re: SQL Abfrage über mehrere Tabellen
 
Zitat:

Zitat von mkinzler
Eine sehr Aufwende Möglichkeit wäre über Joins mit verschiedenen Limits.

Die Aufwändige Variante habe ich im Augenblick.
Mein Problem ist ja im Kern auch die Performance. Das Aufbereiten für die Ansicht habe ich ja durch manuelle Abarbeitung im Griff. Die Abfrage (bei ca. 2000 Kunden*7 mögliche Termine= 14000 Tupel) bremst MySQL enorm aus. Deswegen der Versuch die Abfrage zu beschleunigen.
Ich war in ursprünglich der Meinung ich könnte es durch einen Thread im Hintergrund ablaufen lassen, so dass der Anwender erstmal berühigt andere Dinge erledigen kann. Leider geht das nicht. Wenn der DB-Server die Arbeit aufgenommen hat steht alles bis er fertig ist.

omata 18. Sep 2006 21:43

Re: SQL Abfrage über mehrere Tabellen
 
Hallo Memo,

vielleicht so...

SQL-Code:
SELECT k.id,
       k.name,
       TRIM(GROUP_CONCAT(' ', CONCAT(w.tag, ' ', kz.zeit))) termin
FROM kunde k
LEFT JOIN kunde_zeit kz
  ON k.id = kz.id
LEFT JOIN wochentag w
  ON kz.nr = w.nr
GROUP BY k.id, k.name
ORDER BY k.name
Gruss
Thorsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:21 Uhr.
Seite 1 von 2  1 2      

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