gerald: Tabelle auslesen

Hallo,

ich möchte gerne über _eine_ query Einträge aus meiner Tabelle lesen in dieser Reihenfolge

Erst kommen die Einträge mit...
1. alle top!=0 AND color=0 und status=expert
2. alle top=0 AND color!=0 und status=expert
3. alle top=0 AND color=0 und status=expert
4. alle status=basic

Tabelle:

id | top | color | type (basic, expert)
1  | 1   | 0     | expert
2  | 2   | 0     | expert
3  | 3   | 0     | expert
4  | 2   | 0     | expert
5  | 0   | 0     | basic
5  | 0   | 1     | expert
6  | 0   | 0     | basic
7  | 0   | 2     | expert
8  | 0   | 0     | expert
9  | 0   | 1     | expert
10 | 0   | 3     | expert
11 | 0   | 2     | expert
12 | 0   | 0     | basic
13 | 0   | 1     | expert

Wie sieht die Query dazu aus?

Danke für die Hilfe,
Gerald

  1. Hallo,

    ich möchte gerne über _eine_ query Einträge aus meiner Tabelle lesen in dieser Reihenfolge

    1. alle top!=0 AND color=0 und status=expert
    2. alle top=0 AND color!=0 und status=expert
    3. alle top=0 AND color=0 und status=expert
    4. alle status=basic

    UNION kann Dir helfen. Steht auf allen mir bekannten DBMS in den Versionen, die man heute noch nutzen sollte [1], zur Verfügung.

    Freundliche Grüße

    Vinzenz

    [1] MySQL 3.x sollte man definitiv nicht mehr nutzen :-)

  2. Hello,

    Erst kommen die Einträge mit...

    1. alle top!=0 AND color=0 und status=expert
    2. alle top=0 AND color!=0 und status=expert
    3. alle top=0 AND color=0 und status=expert
    4. alle status=basic

    da gibt es (mindestens) zwei Möglichkeiten:

    (1) UNION (ALL)

      
    SELECT id, top, color, type FROM tabelle WHERE top!=0 AND color=0 AND status='expert'  
    UNION ALL  
    SELECT id, top, color, type FROM tabelle WHERE top=0 AND color!=0 AND status = 'expert'  
    ...  
    
    

    (2) künstliches Einbringen einer Sortierspalte
    SELECT id,
           top,
           color,
           type,
           CASE
             WHEN (top != 0 AND color = 0 AND status='expert') THEN 1
             WHEN (top=0 AND color!=0 AND status = 'expert') THEN 2
             ...
           END AS sortierung
    FROM tabelle
    ORDER BY sortierung

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Ist Dir langweilig? Willst du Spaß? Willst Du Party? Ganz einfach!!! Schicke eine SMS mit dem Bestellwort "Feuer" an die 112 und innerhalb von 5 Minuten stehen 20 Männer mit lustigen Partyhüten, Sirenen und Partywagen vor deinem Haus!  --  Herkunft unbekannt
    1. Hallo Rouven,

      danke für Deinen Beitrag. Jetzt noch eine Verständnisfrage:

      Wenn ich das mit dem UNION ALL mache, ist die Möglichkeit gegeben den Result in seiner Datenmenge zu begrenzen?

        
      (SELECT * FROM tabelle WHERE top!=0 AND color=0 AND status='expert' ORDER BY id)  
      UNION ALL  
      (SELECT * FROM tabelle WHERE top=0 AND color!=0 AND status='expert' ORDER BY id)  
      UNION ALL  
      (SELECT * FROM tabelle WHERE top=0 AND color=0 AND status='expert' ORDER BY id)  
      UNION ALL  
      (SELECT * FROM tabelle WHERE status='basic' ORDER BY id)  
      
      

      Und diese Menge mit LIMIT 5,5 ausgeben?

      Möchte das machen, wenn ich z.b. in einer Listenansicht eine Seitennavigation einbauen möchte.

      Gruß,
      Gerald

      (1) UNION (ALL)

      SELECT id, top, color, type FROM tabelle WHERE top!=0 AND color=0 AND status='expert'
      UNION ALL
      SELECT id, top, color, type FROM tabelle WHERE top=0 AND color!=0 AND status = 'expert'
      ...

      
      >   
      
      
      1. Hi,

        Wenn ich das mit dem UNION ALL mache, ist die Möglichkeit gegeben den Result in seiner Datenmenge zu begrenzen?

        Klar, steht im Handbuch:
        http://dev.mysql.com/doc/refman/5.1/en/union.html

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“