[mySQL] String im Datensatz ersetzen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • dev0
    antwortet
    Zitat von wahsaga Beitrag anzeigen
    ... Wenn du die Nachrichten-ID in die Telefonnummer-Tabelle mit reinschreibst - dann speicherst du die Telefonnummer ja wieder redundant, für jede Nachricht ...
    Riss in meiner Logikstruktur! Ergibt Sinn. Demnach wäre, würde ich Anruflisten von Nachrichten trennen eine neue Tabelle "anrufliste" mit "anruf_id" und "nummer_id" notwendig.

    Die Tabellen würden die Rufnummer dann aus der "Zentraltabelle" "telefonnummern" bekommen. Richtig? :0

    Einen Kommentar schreiben:


  • wahsaga
    antwortet
    Zitat von dev0 Beitrag anzeigen
    Aber welchen Sinn hat es, die Nummer mit einer Nachricht zu verbinden? Schließlich sind diese doch schon verknüpft wenn ich unter "telefonnummern" das Feld "nachrichten_id" eintrage das auf die ID unter "nachrichten" linkt und andersherum.
    Es war doch die Anforderung, eine Nachricht an mehrere Nummern schicken zu können?

    Wenn du die Nachrichten-ID in die Telefonnummer-Tabelle mit reinschreibst - dann speicherst du die Telefonnummer ja wieder redundant, für jede Nachricht.

    (Und nein, mehrere Nummern komma-separiert o.ä. in eine Spalte einzutragen, verstößt schon gegen die erste Normalform, weil die Inhalte dann nicht atomar sind.)

    Einen Kommentar schreiben:


  • dev0
    antwortet
    Zitat von TobiaZ Beitrag anzeigen
    willkommen in der Normalisierung.
    Danke.

    Zitat von TobiaZ Beitrag anzeigen
    Du erhältst 3 Tabellen:

    1) nachrichten:
    id | nachricht | datum | absender_id

    2) telefonnummern:
    id | nummer | (evtl. name)

    3) nummer_nachricht
    nachricht_id | nummer_id
    Die ersten zwei Tabellen kann ich nachvollziehen. Register mit Telefondaten und Telefonbuch. Aber welchen Sinn hat es, die Nummer mit einer Nachricht zu verbinden? Schließlich sind diese doch schon verknüpft wenn ich unter "telefonnummern" das Feld "nachrichten_id" eintrage das auf die ID unter "nachrichten" linkt und andersherum. Geht doch auch, oder ist das gegen die Religion? :-)

    Einen Kommentar schreiben:


  • TobiaZ
    antwortet
    Was bei mir Sinn macht: Telefonnummern mit eigener ID und der ID des Datensatzes mit beinhalteten Daten zur Telefonnummer zu verknüpfen.
    willkommen in der Normalisierung.

    Du erhältst 3 Tabellen:

    1) nachrichten:
    id | nachricht | datum | absender_id

    2) telefonnummern:
    id | nummer | (evtl. name)

    3) nummer_nachricht
    nachricht_id | nummer_id
    Zuletzt geändert von TobiaZ; 13.02.2011, 20:42.

    Einen Kommentar schreiben:


  • dev0
    antwortet
    Passt schon. Es ist ja nicht so, dass ich mich nicht weiter entwickeln möchte - stell dir vor :-)

    Was bei mir Sinn macht: Telefonnummern mit eigener ID und der ID des Datensatzes mit beinhalteten Daten zur Telefonnummer zu verknüpfen.

    Das meinst Du, oder ? Denn das macht durchaus Sinn.

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Wieso Spalten? Die gehören in eine eigene Tabelle. Aber wenn du bei deiner Meinung bleiben willst, ist das nicht schlimm. Ich gebe nur Empfehlungen. Trotzdem bin ich mir fast sicher, dass du dich später mal ärgern wirst, alles in ein Feld gepackt zu haben.

    Einen Kommentar schreiben:


  • dev0
    antwortet
    Danke. Aber das hat für mich keinen Sinn, die Rufnummern in eigene Spalten auszulagern. Ich sehe darin keine Notwendigkeit. Verstehe mich nicht falsch, aber ich halte das für unnötig.

    Das Beispiel, die Adresse in ihre Eigenschaften aufzuteilen, macht da durchaus mehr Sinn.

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Das hat nichts mit meiner Denkstruktur zu tun, es gibt halt bei Datenbanken ein paar Regeln und die sind nicht einmal dogmatisch, sondern rein pragmatisch. Wenn du das nicht einsehen willst und die genannten Stichworte behufs Erweiterung deines Kenntnisstandes nicht erforschen willst, kann ich dir ohnehin nicht helfen. Das Thema ist nämlich nicht mit zwei Sätzen abgehakt und auch nicht mit Überfliegen.

    Edit: Du hast es gut, genau dein Sachverhalt wird genau dort angesprochen.
    Zuletzt geändert von AmicaNoctis; 11.02.2011, 00:49.

    Einen Kommentar schreiben:


  • dev0
    antwortet
    Zitat von AmicaNoctis Beitrag anzeigen
    Wenn du damit meinst, dass es Sinn macht, die Telefonnummern als kommagetrennte Liste zu speichern, bist du gewaltig auf dem Holzweg ...
    Die Kurznachrichten wurden durch ein System an verschiedene Rufnummern versandt. Da die Empfänger alle die selbe Nachricht erhalten haben, wurden diese durch Komma getrennt in einer Spalte aufgenommen, im gleichen Datensatz wie eben die Mitteilung selbst.

    Zitat von AmicaNoctis Beitrag anzeigen
    ... und solltest umso dringender was zum Thema Normalisierung und relationales Modell lesen.
    Ich habe das Thema kurz überflogen und mir ist auf Wikipedia der Abschnitt Ziel: Konsistenzerhöhung durch Redundanzvermeidung zugesprungen. Da ich durch die benannte Prozedur also überschüssige Einträge vermeide, bin ich doch auf dem richtigen Weg ?

    Demnach ist deine durchaus logische Erklärung für den Holzpfad zwar richtig, aber in diesem Fall meiner Meinung nach deplatziert.

    Falls ich mich irre - was durchaus sein kann - bitte ich um ein kleines Beispiel deinerseits, um deine Denkstruktur nachvollziehen zu können.

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Zitat von dev0 Beitrag anzeigen
    Demnach macht es Sinn, die Einträge zusammen zu fassen
    Wenn du damit meinst, dass es Sinn macht, die Telefonnummern als kommagetrennte Liste zu speichern, bist du gewaltig auf dem Holzweg und solltest umso dringender was zum Thema Normalisierung und relationales Modell lesen.

    Zitat von dev0 Beitrag anzeigen
    Was darf ich unter "Krücke" verstehen
    Wenn etwas nicht so ist wie es sein sollte und nicht "Hand und Fuß" hat, aber trotzdem lieber irgendwie laufen soll als gar nicht, klemmt man manchmal eine Krücke dran und hofft, dass es damit erstmal eine Weile geht. Trotzdem wird die Software immer humpeln und wenn sie größer wird, fängst du dann an, Krücken mit weiteren Krücken zu stützen. Den Begriff finde ich eigentlich ganz passend, weil er einen offensichtlichen Makel beschreibt, den der unambitionierte Optimist trotzdem gerne mit "aber es geht doch" abtut... bis es kracht.

    Einen Kommentar schreiben:


  • dev0
    antwortet
    Zitat von TobiaZ Beitrag anzeigen
    ... Spricht auch nicht gerade für eine normalisierte Datenbank ...
    Ich habe vergessen zu sagen, dass auch Kurzmitteilungen gespeichert werden.

    Die habe ich jetzt aber in eine andere Tabelle geworfen, um die Datensätze besser zu verwalten.

    Demnach macht es Sinn, die Einträge zusammen zu fassen.

    Zitat von AmicaNoctis Beitrag anzeigen
    ... TobiaZ hat vollkommen Recht und jetzt kann alles nur noch auf eine Krücke hinauslaufen ...
    Was darf ich unter "Krücke" verstehen ? :-) Du bist für diese Uhrzeit sehr rhetorisch veranlagt! ;-)

    Dein Tipp mit dem zweiten replace hat jedoch gefruchtet!

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    TobiaZ hat vollkommen Recht und jetzt kann alles nur noch auf eine Krücke hinauslaufen, aber im Rest-Teil (Substring ab 2) kannst du ja auch nochmal ein replace vorschalten und ersetzt dort ",0" durch ",+49"

    Einen Kommentar schreiben:


  • TobiaZ
    antwortet
    Nun habe ich aber das Problem, dass in einigen Einträgen mehrere Rufnummern ( durch Komma getrennt ) gelistet sind. Quasi als Array hinterlegt. Dort wird allein die erste Rufnummer angepasst. Aber wie kann ich obiges nun für alle Rufnummern anwenden ?
    Autsch, das ist natürlich übelst schlecht. Spricht auch nicht gerade für eine normalisierte Datenbank. Vielleicht mal nebenbei mal anlesen, falls noch nicht bekannt.

    Dein Problem kannst du am besten mit regulären ausdrücken lösen. Werden auch von MySQL beherrscht.

    Wenns ne einmalige Operation ist, ist es aber vielleicht auch schnell von Hand gemacht.

    Einen Kommentar schreiben:


  • dev0
    antwortet
    Okay, nach ganz viel herum probieren habe ich folgendes:

    Code:
    SELECT CONCAT(REPLACE(SUBSTR(`nummer`,1,1),'0','+49'),SUBSTR(`nummer`,2)) FROM `anrufliste` WHERE `nummer` LIKE '0%'
    Dies scheint zu funktionieren.

    Nun habe ich aber das Problem, dass in einigen Einträgen mehrere Rufnummern ( durch Komma getrennt ) gelistet sind. Quasi als Array hinterlegt. Dort wird allein die erste Rufnummer angepasst. Aber wie kann ich obiges nun für alle Rufnummern anwenden ?

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Hallo nochmal,

    du hast doch von mir schon Infos bekommen. Was fehlt dir jetzt noch? Eigentlich habe ich sogar ziemlich genau beschrieben, was zu tun ist und welche Funktionen du brauchst. Daher solltest du vielleicht detaillierter darauf eingehen, warum du damit nicht weiterkommst bzw. an welcher Stelle.

    Vermutlich deswegen, weil das Grundlagen sind, die auch in den Forenregeln beschrieben werden, hat dich wohl jemand für deren Nicht-Lektüre angezählt, was ich wegen des fehlenden begründenden Kommentars aber nicht besonders pädagogisch wirksam finde.

    Gruß,

    Amica

    Einen Kommentar schreiben:

Lädt...
X