AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Abfrage über mehrere Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Abfrage über mehrere Tabellen

Ein Thema von Memo · begonnen am 18. Sep 2006 · letzter Beitrag vom 19. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Memo
Memo

Registriert seit: 19. Aug 2003
509 Beiträge
 
Delphi 7 Enterprise
 
#1

SQL Abfrage über mehrere Tabellen

  Alt 18. Sep 2006, 15:01
Datenbank: MySQL • Version: 5 • Zugriff über: DAC for MySQL
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.
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#2

Re: SQL Abfrage über mehrere Tabellen

  Alt 18. Sep 2006, 15:11
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von Memo
Memo

Registriert seit: 19. Aug 2003
509 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: SQL Abfrage über mehrere Tabellen

  Alt 18. Sep 2006, 15:23
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`
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: SQL Abfrage über mehrere Tabellen

  Alt 18. Sep 2006, 16:05
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
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Memo
Memo

Registriert seit: 19. Aug 2003
509 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: SQL Abfrage über mehrere Tabellen

  Alt 18. Sep 2006, 16:26
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: SQL Abfrage über mehrere Tabellen

  Alt 18. Sep 2006, 16:31
Wiviele Termine pro Kunde sind möglich?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Memo
Memo

Registriert seit: 19. Aug 2003
509 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: SQL Abfrage über mehrere Tabellen

  Alt 18. Sep 2006, 16:33
Zitat von mkinzler:
Wiviele Termine pro Kunde sind möglich?
Ich habe es auf sieben begrenzt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: SQL Abfrage über mehrere Tabellen

  Alt 18. Sep 2006, 16:34
Eine sehr Aufwende Möglichkeit wäre über Joins mit verschiedenen Limits.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Memo
Memo

Registriert seit: 19. Aug 2003
509 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: SQL Abfrage über mehrere Tabellen

  Alt 18. Sep 2006, 16:46
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.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: SQL Abfrage über mehrere Tabellen

  Alt 18. Sep 2006, 22:43
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:33 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