Tabelle auslesen
gerald
- datenbank
0 Vinzenz Mai1 Rouven
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
Hallo,
ich möchte gerne über _eine_ query Einträge aus meiner Tabelle lesen in dieser Reihenfolge
- alle top!=0 AND color=0 und status=expert
- alle top=0 AND color!=0 und status=expert
- alle top=0 AND color=0 und status=expert
- 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 :-)
Hello,
Erst kommen die Einträge mit...
- alle top!=0 AND color=0 und status=expert
- alle top=0 AND color!=0 und status=expert
- alle top=0 AND color=0 und status=expert
- 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
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'
...
>
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