Ankündigung

Einklappen
Keine Ankündigung bisher.

Anfängerfrage? Zwei Werte in einem DB-Feld schon während der SQL-Query trennen

Einklappen

Neue Werbung 2019

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

  • Anfängerfrage? Zwei Werte in einem DB-Feld schon während der SQL-Query trennen

    Hallo miteinander,

    ich habe ein altes PHP-Script, dass sich Daten aus einer MySQL-DB holt und diese sortiert zurückgibt. Das will ich mit einer anderen, fremden DB-Struktur verwenden.
    Der wesentliche Unterschied: Werte, die bei der alten DB in zwei Spalten abgelegt waren, sind bei der neuen DB in nur einer Spalte und mit Komma getrennt – keine Ahnung, warum der DB-Ersteller das so machen musste.

    Die Sortierung während der Abfrage würde ich gern weiterverwenden, sie basiert nämlich auf einer Berechnung dieser beiden Werte. Da die Berechnung schon innerhalb der Abfrage stattfindet und das Ergebnis für die Sortierung herangezogen wird, dachte ich, es gäbe vielleicht auch eine Möglichkeit, die beiden Werte schon während der Abfrage zu trennen, bspw. durch eine String-Funktion wie split/explode. Ist sowas möglich?

    Vielen Dank!

  • #2
    Du willst an den Symptomen rumstricken, wäre ist nicht sinnvoller die Ursache zu bereinigen?
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      So etwas wie Split oder Explode gibt es in MYSQL nicht. Du solltest deshalb versuchen, deiner DB eine Normalisierung zu verpassen und nicht auf eine vermurkste Struktur aufzusetzen.

      Nur wenn dieser Weg nicht möglich ist würde ich so etwas wie das hier
      Code:
      SELECT 
        SUBSTRING_INDEX(name,',',1) as name1,
        CASE 
          WHEN SUBSTRING_INDEX(name,',',-1) = SUBSTRING_INDEX(name,',',1) THEN null
          ELSE SUBSTRING_INDEX(name,',',-1)
        END as name2
      FROM
        tabelle
      probieren.

      Kommentar


      • #4
        http://datenbanken-verstehen.de/date...te-normalform/

        Kommentar


        • #5
          : Werte, die bei der alten DB in zwei Spalten abgelegt waren, sind bei der neuen DB in nur einer Spalte und mit Komma getrennt
          Achtung! Das klingt sehr stark nach falschem DB-Design. Sowas kann böse Enden.

          Hier noch zwei Links zu dem Thema Normalisierung. Das ist fundemantal für sauberes DB-Design und allem was danach kommt (Abfragen, Auswertungen etc etc..).

          http://www.peterkropff.de/site/mysql/normalisierung.htm

          http://www.sqldocu.com/nine/normalform1.htm

          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            @alle: Vielen Dank für die Antworten. Und natürlich habt ihr allesamt Recht, was Normalisierung und Murks angeht. Allerdings müsste ich, um das zu ändern, den Verfasser der Erweiterung des CMS dazu bringen, seine DB- bzw. Tabellen-Struktur zu ändern... Das ist mir für das Problem zu langwierig.

            Inzwischen bin ich auch schon selbst ein gutes Stück weitergekommen. Ich habe SQL-Dokus gelesen und mir aus LOCATE, LEFT und SUBSTR was zurechtgebastelt, was seinen Dienst tut. Es sieht allerdings rechenintensiv aus und da frage ich mich: wie sinnvoll ist das von der Performance her?

            PHP-Code:
            SELECT LEFT(fremdeSpalte,LOCATE(",",fremdeSpalte)-1) AS linkerWertSUBSTR(fremdeSpalte,LOCATE(",",fremdeSpalte)+1) AS rechterWert ... 
            Die Tabelle hat um die 150 Einträge.

            Kommentar


            • #7
              Sind die Laufzeiten merkbar hoch?

              Die Tabelle hat um die 150 Einträge.
              Spontan: Denk nicht drüber nach.

              Lass ein EXPLAIN laufen und schau nach.
              The string "()()" is not palindrom but the String "())(" is.

              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Ich würde das wahrscheinlich sogar in PHP machen, solange du nicht in dieser Spalte suchen musst.

                Kommentar


                • #9
                  Vielen Dank an alle! Bin sehr geholfen

                  Kommentar


                  • #10
                    Zitat von protestix Beitrag anzeigen
                    Ich würde das wahrscheinlich sogar in PHP machen, solange du nicht in dieser Spalte suchen musst.
                    Ich normalerweise auch, aber es hängt eine lustige Berechnung (innerhalb der SQL-Query) dran, die ich auf die Schnelle nicht in PHP umsetzen will – never touch ... und so.

                    Kommentar

                    Lädt...
                    X