SQL Join über teilinhalte

Diskutiere SQL Join über teilinhalte im Web & Grafik Forum im Bereich Internet & Telekomunikation Forum; Hallo ihr lieben, ich würde gerne einen Join über den Teilinhalt einer Zelle machen, d.H. Wenn ich eine Tabelle mit Kunden habe und eine mit...
  • SQL Join über teilinhalte Beitrag #1
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
Hallo ihr lieben, ich würde gerne einen Join über den Teilinhalt einer Zelle machen, d.H. Wenn ich eine Tabelle mit Kunden habe und eine mit Angestellten, habe ich in der Kunden-Tabelle eine Spalte die heißt "Ansprechpartner" dort drin steht nun (z.B.)
"5|004900000000;" oder "18|004900000001;2|00490000003"
wobei die zahl vor der Pipe für den Mitarbeiter steht und dahinter ist die Telefonnummer mit Durchwahl.

Ich möchte jetzt aber praktisch zu jedem Kunden alle Ansprechpartner und auch die Durchwahl haben, um diese dem Kunden auf Wunsch geordnet vorzulegen

Leider finde ich keine Möglichkeit eine Zelle aus der Angestellten-Tabelle mit dem teil dieser Ansprechpartner Tabelle zu vergleichen ...

Hoffe ihr versteht das Problem und könnt mir weiterhelfen

mfg Trµ
 
  • SQL Join über teilinhalte Beitrag #2
W

Wartos

Bekanntes Mitglied
Dabei seit
17.07.2001
Beiträge
767
Reaktionspunkte
0
Ort
04552
Bevor ich jetzt allzuviel drüber nachdenke würde ich vorschlagen: mach da zwei Spalten draus.
 
  • SQL Join über teilinhalte Beitrag #3
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
ich lass dich aber weiter nachdenken, es hat schon einen Grund warum es eine Spalte ist! Es gibt HIER speziell eine Zusammengehörigkeit von MEHREREN Ansprechpartnern, Rufnummern UND Kunden! dann müsste ich ja für "18|004900000001;2|00490000003" schon 4 Spalten haben ... es gibt aber noch längere Eintrage

oder es käme in spalten jeweils so "18|2|..|.." und "004900000001|00490000003|.." dann müsste ich aber auch hier jeweils das erste stück auslesen, dann das zweite dann das dritte (weil ja jeder eintrag vom Ansprechpartner zu einer Durchwahl zuzuordnen ist pro kunde)
 
  • SQL Join über teilinhalte Beitrag #4
W

Wartos

Bekanntes Mitglied
Dabei seit
17.07.2001
Beiträge
767
Reaktionspunkte
0
Ort
04552
Die Daten sind so wohl kaum auswertbar, zumindest nicht mit akzeptablem Aufwand und Geschwindigkeit.
Ich bin jetzt nicht der Datenbank-Guru, aber schau dir mal an, was Normalisierung ist bzw. wie man eine m:n-Beziehung abbildet. Da machst du jetzt zwar paar Handstände, hast später aber weniger Mühe und die Datenbank muss nicht jeden Datensatz einzeln parsen lassen etc. Das dauert bei größeren Datenmengen ewig. Indizes (nicht vergessen, sonst wird's langsam!) bringen dann auch ordentlich Performance.
http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)#Erste_Normalform_.281NF.29
http://de.wikipedia.org/wiki/Kardinalität_(Datenbanken)#n:m
Besonders das Professor-Student-Beispiel dürfte etwa deinem Ansprechpartner-Kunden-Verhältnis entsprechen, oder?
 
  • SQL Join über teilinhalte Beitrag #5
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Jepp, wollte ich auch gerade vorschlagen. Im Prinzip brauchst du einfach eine Tabelle kunden_ansprechpartner mit einer Spalte für die eindeutige Kunden-ID, und einer für die eindeutige ID des Ansprechpartners (evtl. kannst du noch eine Autoincrement-ID für den Eintrag machen; ich für meinen Teil hab in jeder Tabelle eine ID-Spalte als Primary Key). Dann kannst du für jeden Kunden beliebig viele Ansprechpartner einrichten. Sinnvollerweise sollte es natürlich eine eigene Tabelle ansprechpartner geben, in der jeder eine eindeutige ID hat, und seine restlichen Daten.
So wie du das jetzt hast, ist das - nicht böse sein für die direkte Wortwahl :) - so falsch, wie man es nur machen kann.

Es gibt allerdings in SQL schon Funktionen, um einen Teil eines Feldes zu erhalten, siehe http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
Ob die allerdings nur im SELECT-Teil erlaubt sind, oder auch in der WHERE-Klausel, kann ich spontan nicht sagen.
 
  • SQL Join über teilinhalte Beitrag #6
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
naja das Problem ist, dass ich diese Tabelle nicht angelegt habe, aber jetzt auswerten soll ... bei deutlich über 20.000 Kundeneinträgen finde ich das wäre etwas zu viel Aufwand obwohl schon eine eindeutige ID besteht ...

naja ich guck mir den Link nochmal an such mal etwas weiter ...

danke soweit
 
  • SQL Join über teilinhalte Beitrag #7
W

Wartos

Bekanntes Mitglied
Dabei seit
17.07.2001
Beiträge
767
Reaktionspunkte
0
Ort
04552
Oh, mein Beileid.... :no: ich beneide dich nicht um diese Aufagabe.
Falls das nicht geht, naja, musst du eben im schlimmsten Fall jeden Datensatz abrufen und einzeln parsen. Bei 20.000 Datensätzen... naja, das dauert Stunden bis Tage...
 
  • SQL Join über teilinhalte Beitrag #8
futtlui

futtlui

Bekanntes Mitglied
Dabei seit
21.01.2003
Beiträge
10.439
Reaktionspunkte
2
Falls das nicht geht, naja, musst du eben im schlimmsten Fall jeden Datensatz abrufen und einzeln parsen. Bei 20.000 Datensätzen... naja, das dauert Stunden bis Tage...
aber nur wenn man's per Hand macht - das kann man ja auch über ein kleines PHP-Script automatisieren und die Tabellen neu (und richtig) schreiben.
 
  • SQL Join über teilinhalte Beitrag #9
W

Wartos

Bekanntes Mitglied
Dabei seit
17.07.2001
Beiträge
767
Reaktionspunkte
0
Ort
04552
ok, aber wenn die Tabellen so bleiben müssen... dann noch Abhängigkeiten untereinander....
Hatte bei ner JOIN-Abfrage mal den Index vergessen - Da dauerte eine Abfrage bei ca. 100 Datensätzen über 30 Sekunden, mit Index nur noch Sekundenbruchteile.
 
  • SQL Join über teilinhalte Beitrag #10
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Das ist natürlich was anderes; dann sollte der Verantwortliche mal gefragt werden, was er sich dabei gedacht hat. Ich würde ja mal spontan drauf tippen, dass das früher mal eine Excel-Liste war... ;)
Wenn möglich würde ich erstmal analysieren, welche Abhängigkeiten von diesem Feld bestehen; sprich, was alles drauf zugreift.
Neue Tabellen für die Ansprechpartner mit allen erforderlichen Daten (ich nehme mal an, bisher muss noch extra Aufwand betrieben werden, um einem Kunden anhand der Nummer in der jetzigen Tabelle sagen zu können, wie sein Ansprechpartner heißt) und für die Verknüpfungen anzulegen, dürfte ja kein Problem sein; davon ist ja nichts anderes betroffen. Die Ansprechpartner-Tabelle sollte ja nicht allzuviele Einträge haben, und die Verknüpfungstabelle ließe sich recht einfach automatisch erzeugen; vermutlich sogar alleine mit einer etwas komplexeren SQL-Anweisung, oder einfach per Skript.
Natürlich kannst du auch das originale Feld in der Tabelle belassen; dann läuft alles andere weiter wie bisher. Aber das wäre natürlich grundfalsch, weil du dann automatisch Inkonsistenzen züchtest, wenn die gleichen Daten zweimal vorhanden sind. Wenn irgendwie mit vertretbarem Aufwand möglich, sollte alles umgestellt und das Feld aus der Kundentabelle entfernt werden.
Aber das ist bei einer bestehenden Datenbank leichter gesagt als getan, das ist mir bewusst. Falls nicht ohnehin klar, solltest du derlei Basteleien natürlich nicht am Produktivsystem durchführen, sondern erstmal an einer Kopie. :)

Egal ob zur automatischen Richtigstellung, oder zum Verwenden der aktuellen Version, viell. hilft dir das weiter:
http://forums.mysql.com/read.php?60,78776,78776#msg-78776
 
Zuletzt bearbeitet:
Thema:

SQL Join über teilinhalte

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.173
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben