Ankündigung

Einklappen
Keine Ankündigung bisher.

Alternativer Wert aus einer Tabelle

Einklappen

Neue Werbung 2019

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

  • Alternativer Wert aus einer Tabelle

    Hallo,
    ich habe eine Tabelle aus der ich gerne einen Eintrag lesen möchte. Wenn dieser Eintrag nicht existiert, soll ein alternativer Wert zurück gegeben werden. Leider weiß ich nicht wie ich das hinbekommen soll. Die Ergebnisse in PHP zu bearbeiten ist nicht das Problem, aber ich hoffe das es schon in MySQL möglich ist.

    Hier mal ein vereinfachter Aufbau meiner Tabelle mit einem Inhalt.

    Code:
    ID   OBST    PREIS    BIO
    ==========================
    1    Apfel   5        0
    2    Apfel   7        1
    4    Birne   4        0
    5    Banane  6        1
    9    Kiwi    4        0
    10   Kiwi    5        1
    Ich möchte gerne den Preis für "Apfel" bestimmen. Es soll immer der Preis für die Variante "Bio" zurück gegeben werden. Nur wenn für das Obst (z.B. Birne) keine Variante "Bio" existiert soll der Wert mit Bio = 0 zurück gegeben werden.

    Ich hoffe mal das ich das einigermaßen verständlich beschrieben habe. Lässt sich das Problem direkt in MySQL lösen?


  • #2
    Zitat von sallo Beitrag anzeigen
    Ich hoffe mal das ich das einigermaßen verständlich beschrieben habe. Lässt sich das Problem direkt in MySQL lösen?
    ob das in Zettelkasten geht mußt selber rausbekommen:

    Code:
    test=*# select * from sallo ;
     id |  obst  | preis | bio
    ----+--------+-------+-----
      1 | apfel  |     5 | f
      2 | apfel  |     7 | t
      4 | birne  |     4 | f
      5 | banane |     6 | t
      9 | kiwi   |     4 | f
     10 | kiwi   |     5 | t
    (6 rows)
    
    Time: 0,092 ms
    test=*# select bio,min(preis) from sallo where obst = 'apfel' group by bio order by case when bio then 0 else 1 end limit 1;
     bio | min
    -----+-----
     t   |   7
    (1 row)
    
    Time: 0,176 ms
    test=*# select bio,min(preis) from sallo where obst = 'birne' group by bio order by case when bio then 0 else 1 end;
     bio | min
    -----+-----
     f   |   4
    (1 row)
    
    Time: 0,313 ms
    test=*# select bio,min(preis) from sallo where obst = 'banane' group by bio order by case when bio then 0 else 1 end;
     bio | min
    -----+-----
     t   |   6
    (1 row)
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar

    Lädt...
    X