ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
656
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    Hoeze ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    21
    Ich hab in Java folgendes Query:
    Code sql:
    1
    
    SELECT f.* FROM (SELECT item,MIN(price) AS minprice FROM stock GROUP BY item) AS x INNER JOIN stock AS f ON f.item = x.item AND f.price = x.minprice WHERE (world = 'world' OR world = 'world_nether')
    Jetzt will ich das WHERE erweitern:
    Wenn <damageable==true> DANN <prüfe, ob durability==0>

    Wie stelle ich das an?

    Struktur:
    Code sql:
    1
    
    CREATE TABLE stock('id' INTEGER PRIMARY KEY,'durability' INTEGER, 'damageable' BOOLEAN, 'enchantments' VARCHAR(80),'world' VARCHAR(80),'seller' VARCHAR(80) NOT NULL,'item' INTEGER NOT NULL, 'price' FLOAT NOT NULL,'amount' INTEGER NOT NULL)
     

  2. #2
    Avatar von Yaslaw
    Yaslaw ist gerade online n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    7.053
    item: Ein Tipp. Formatiere SQL-Statements in ein lesbares Format. Einzeiler sind in dieser komplexität nicht mher lesbar. Klammern zählen ist ein schlechtes Hobby. Ps: Siehe auch den dritten Punkt meine Signatur - normalerweise lese ich solche SQLs NICHT!

    Etwa so kann man das LESBAR formatieren
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    SELECT 
        f.* 
    FROM 
        (
            SELECT 
                item,
                MIN(price) AS minprice 
            FROM 
                stock 
            GROUP BY 
                item
        ) AS x 
        INNER JOIN stock AS f 
            ON f.item = x.item 
            AND f.price = x.minprice 
    WHERE 
        (
            world = 'world' 
            OR world = 'world_nether'
        );
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    CREATE TABLE stock(
        'id' INTEGER PRIMARY KEY,
        'durability' INTEGER, 
        'damageable' BOOLEAN, 
        'enchantments' VARCHAR(80),
        'world' VARCHAR(80),
        'seller' VARCHAR(80) NOT NULL,
        'item' INTEGER NOT NULL, 
        'price' FLOAT NOT NULL,
        'amount' INTEGER NOT NULL
    );

    item: mit einem CASE kannst du das wahrscheinlich lösen. Das folgende Beispiel ist für MySQL. In SQLlIte gibt es sicher was ähnliches.
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    ...
    WHERE 
        (
            world = 'world' 
            OR world = 'world_nether'
        )
        AND CASE WHEN
                damageable
            THEN
                (durability = 0)
            ELSE
                TRUE
            END CASE;
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements¨in PHP-Code kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit Code-Tags verwenden

  3. #3
    Hoeze ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    21
    Danke, sry für die Formatierung, SQL ist nicht wirklich mein Fachgebiet...
    Besonders, wenn man bedenkt, dass die Lösung viel einfacher gewesen wäre und ich so mal wieder nen sinnlosen Therad eröffnet habe:
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    SELECT 
        f.* 
    FROM 
        (
            SELECT 
                item,
                MIN(price) AS minprice 
            FROM 
                stock 
            GROUP BY 
                item
        ) AS x 
        INNER JOIN stock AS f 
            ON f.item = x.item 
            AND f.price = x.minprice 
    WHERE 
        (
            world = 'world' 
            OR world = 'world_nether'
        )
        AND 
        (
            damageable == 'false' 
            OR durability == 0
        )
     

Ähnliche Themen

  1. » Word Wenn in Spalte = True; dann "ü"?
    Von TerraX10 im Forum Office-Anwendungen
    Antworten: 2
    Letzter Beitrag: 16.03.12, 13:07
  2. Antworten: 2
    Letzter Beitrag: 30.03.10, 13:22
  3. Wenn Beide WHERES übereinstimmen = TRUE
    Von Udem im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 14.09.09, 18:27
  4. Antworten: 2
    Letzter Beitrag: 01.10.07, 23:58
  5. XSL Problem:Bedingung 2x true
    Von Bionicman im Forum XML Technologien
    Antworten: 4
    Letzter Beitrag: 04.09.04, 15:14