Benutzerdefinierte Suche

Tabellenspalten verschmelzen

  1. Jakob

    Jakob Thread StarterMacUser Mitglied

    Mitglied seit:
    05.01.2004
    Beiträge:
    1.067
    Zustimmungen:
    21
    Hallo!

    Ich habe eine Tabelle mit zwei Spalten, die linke voll besetzt, in der rechten nur manche.
    Für manche Ausgaben möchte ich, wenn es einen Wert in Spalte 2 gibt diesen anstatt den Wert der Spalte 1 ausgeben.

    Dies:
    Code:
    Spalte 1  |  Spalte 2
        a     |    NULL
        b     |     2
        c     |    NULL
        d     |     3
    
    Soll also für die Abfrage zu
    Code:
    Spalte 1  |  Spalte 2
        a     |    NULL
        2     |     2
        c     |    NULL
        3     |     3
    
    werden.

    Die Tabelle sollte nicht dauerhaft verändert werden, es gilt nur für manche Aufrufe. Kann ich das auf MySQL-Ebene hinbekommen? Würde es ungern in einer PHP-for-Schleife lösen.
     
    Jakob, 09.05.2006
  2. timoken

    timokenMacUser Mitglied

    Mitglied seit:
    11.11.2003
    Beiträge:
    827
    Zustimmungen:
    8
    ?! wenn ein wert null ist, dann ist er null. mysql ist eine datenbank und keine programmierumgebung mit der man "wenn dann"-bedingungen definieren kann (soweit ich weiß)
     
    timoken, 09.05.2006
  3. wegus

    wegusMacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    14.982
    Zustimmungen:
    1.545
    Das geht nur mit ner temporären Tabelle ( ich glaub das mysql beizeiten auch!?)

    Erstell einfach eine temporäre Tabelle, mach einen SELECT aus Spalte 1 da hinein und dann einen UPDATE auf diese Tabelle aus Spalte2 wo Spalte1 NULL ist. Resultat ist eine von Spalte2 überlagerte Spalte1. Die kannst Du dann auslesen und die temporäre Tabelle verwerfen!
     
    wegus, 09.05.2006
  4. master_p

    master_pMacUser Mitglied

    Mitglied seit:
    31.01.2005
    Beiträge:
    1.063
    Zustimmungen:
    23
    Temporäre Tabelle? Keine IF-Anweisung in MySQL? Sag mal denke ich hier falsch oder kennt ihr die performantesten MySQL-Befehle nicht?

    Ich würde es so lösen:
    Code:
    SELECT IF(Spalte2.feld IS NOT NULL, Spalte2.feld, Spalte1.feld) FROM blabla LEFT JOIN blabla WHERE blabla ORDER BY blabla
    
    Die IF-Anweisung in MySQL geht halt IF(Bedingung, Rückgabe-bei-Erfüllung, else-Zweig). Man kann auch Texte zurückgeben (z.B. für Checkboxen)

    IF (checkboxfeld=0, '', 'checked="checked")
     
    master_p, 09.05.2006
  5. wegus

    wegusMacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    14.982
    Zustimmungen:
    1.545
    Sorry, wegus==> Microsoft SQL-Server !
    Außerdem bin ich bemüht mit Standard-SQL auszukommen, eben falls ich mal nen mysql oder postgres irgendwo brauche!
     
    wegus, 09.05.2006
  6. Hans Wurst

    Hans WurstMacUser Mitglied

    Mitglied seit:
    25.05.2005
    Beiträge:
    197
    Zustimmungen:
    0
    du könntest das mit einem self join in sql verwirklichen. wie die sql-syntax genau lautet, weiß ich nicht aus dem stehgreif. habe aber mal ein ähnliches problem auf diese weise gelöst.
     
    Hans Wurst, 10.05.2006
  7. Jakob

    Jakob Thread StarterMacUser Mitglied

    Mitglied seit:
    05.01.2004
    Beiträge:
    1.067
    Zustimmungen:
    21
    Hallo,

    nach längerem Überlegen habe ich die Struktur jetzt nochmals geändert, diesen speziellen Join brauche ich da jetzt erstmal nicht mehr. Vielen Dank für die vielen Tipps!

    Nach 500-seitiger Lektüre meine ich mit UNION das am geschicktesten hinzubekommen.

    Bzgl. der IFs:
    Es gibt in SQL eine CASE-Funktion, die sowas macht:
    Code:
    CASE expr
    WHEN value1 THEN result1
      [when value2 THEN result2]… [ELSE resultn]
    END
    
    Die soll aber auch je nach Hersteller leicht anders benannt sein, zumindest soll es sie aber überall geben.
     
    Jakob, 12.05.2006
Die Seite wird geladen...
Ähnliche Themen - Tabellenspalten verschmelzen
  1. Little Macianer
    Antworten:
    20
    Aufrufe:
    5.908