Probleme beim Spalten auslesen
Andi
- datenbank
Hallo,
ich such nach eine vernünftigen Möglichkeit Daten aus meiner DB zu lesen.
Ich habe folgendan Aufbau.
id | bild | kategorie | standard
--------------------------------------
1 | bild1 | 1 | 0
2 | bild2 | 3 | 1
3 | bild5 | 1 | 0
4 | bild3 | 5 | 0
5 | bild4 | 5 | 0
6 | bild6 | 1 | 1
7 | bild8 | 3 | 0
8 | bild9 | 1 | 0
Ich möchte aus jeder Kategorie das Standardbild auslesen. Wenn keines Vorhanden ist soll das nächste genommen werden.
Wenn ich meine Tabelle einfach nach dem Standard durch sortiere bekomme ich alle Resultate. Doch das will ich vermeiden.
Es soll jeweils aus einer Kategorie die Standard Spalte bzw. wenn es keine gibt die nächste ausgewählt werden.
Gibts da ne möglichkeit das in einer Abfrage zu realisieren?
Danke euch schon mal,
MfG. Andi!
Hallo Andi,
id | bild | kategorie | standard
1 | bild1 | 1 | 0
2 | bild2 | 3 | 1
3 | bild5 | 1 | 0
4 | bild3 | 5 | 0
5 | bild4 | 5 | 0
6 | bild6 | 1 | 1
7 | bild8 | 3 | 0
8 | bild9 | 1 | 0
select a.bild, a.kategorie from bild_kategorie a where a.id=(select min(b.id) from bild_kategorie b where a.kategorie=b.kategorie and b.standard in (select max(c.standard) from bild_kategorie c where a.kategorie=c.kategorie));
Ergebnis:
bild | kategorie
-------------------
bild2 | 3
bild3 | 5
bild6 | 1
Gruß
Hans
Hi,
id | bild | kategorie | standard
1 | bild1 | 1 | 0
2 | bild2 | 3 | 1
3 | bild5 | 1 | 0
4 | bild3 | 5 | 0
5 | bild4 | 5 | 0
6 | bild6 | 1 | 1
7 | bild8 | 3 | 0
8 | bild9 | 1 | 0
SELECT * FROM tabelle GROUP BY kategorie ORDER BY standard
könnte ect das gewünschte ergebniss liefern, musst du testen bin mir nicht 100%ig sicher.
MfG
Hallo,
SELECT * FROM tabelle GROUP BY kategorie ORDER BY standard
könnte ect das gewünschte ergebniss liefern, musst du testen bin mir nicht 100%ig sicher.
Super, Danke genau das was ich gesucht habe!
MfG. Andi!
Hallo Andi
SELECT * FROM tabelle GROUP BY kategorie ORDER BY standard
Ich zitiere aus dem von mir in https://forum.selfhtml.org/?t=109121&m=681195 verlinkten Handbuchabschnitt [1]:
<zitat>
Do not use this feature if the columns you omit from the GROUP BY part are not unique in the group! You get unpredictable results.
</zitat>
Super, Danke genau das was ich gesucht habe!
Du suchst also unvorhersagbare Ergebnisse?
Verwende lieber den Vorschlag von Hans!
Freundliche Grüße
Vinzenz
[1] Die deutsche Übersetzung findest Du unter http://dev.mysql.com/doc/mysql/de/group-by-functions.html.
Hallo Daniel
id | bild | kategorie | standard
SELECT * FROM tabelle GROUP BY kategorie ORDER BY standard
Dieses Statement ist in Standard-SQL fehlerhaft. Wenn Du GROUP BY verwendest, ist es erforderlich, dass die in der SELECT-Liste auftretenden Felder in der GROUP-BY-Klausel auftauchen oder für das Feld eine Aggregatsfunktion verwendet wird.
MySQL ist in diesem Fall meiner Meinung nach unnötigerweise fehlertolerant, da
die Werte der Spalten id, bild und standard auf Zufall beruhen, siehe MySQL-Handbuch.
Freundliche Grüße
Vinzenz
Hi,
MySQL ist in diesem Fall meiner Meinung nach unnötigerweise fehlertolerant, da
die Werte der Spalten id, bild und standard auf Zufall beruhen
deshalb ja das ORDER BY, denke mir das die werte dann nach standard
sortiert werden und MySQL nimmt AFAIK nicht zufällige sondern den ersten
wert der sortierten tabelle bei dem die kategorie zutrifft und
ignoriert alle weiteren. zumindest hab ich mir das so gedacht und habe
ja gesagt das ich nicht weis ob es (fehlerfrei) funktioniert und er es
testen soll.
MfG
Hallo Daniel
MySQL ist in diesem Fall meiner Meinung nach unnötigerweise fehlertolerant, da
die Werte der Spalten id, bild und standard auf Zufall beruhendeshalb ja das ORDER BY, denke mir das die werte dann nach standard
sortiert werden und MySQL nimmt AFAIK nicht zufällige sondern den ersten
Nein, MySQL nimmt zufällige, siehe https://forum.selfhtml.org/?t=109121&m=681219 bzw. MySQL-Handbuch
wert der sortierten tabelle bei dem die kategorie zutrifft und
ignoriert alle weiteren. zumindest hab ich mir das so gedacht und habe
ja gesagt das ich nicht weis ob es (fehlerfrei) funktioniert und er es
testen soll.
Leider falsch gedacht. Wenn zufällig beim derzeitigen Datenbestand das richtige rauskommt, heisst das noch lange nicht, dass bei einer weiteren Abfrage das gleiche Ergebnis herauskommt: "unpredictable results" ist eine eindeutige Formulierung. Auf so etwas würde ich mich nie verlassen.
Freundliche Grüße
Vinzenz
yo,
MySQL ist in diesem Fall meiner Meinung nach unnötigerweise fehlertolerant, da
die Werte der Spalten id, bild und standard auf Zufall beruhen, siehe MySQL-Handbuch.
nicht wirklich fehlertolerant, mysql setzt aber vorraus, dass der user wisse wie er es richtig benutzten darf, quasi blindes vertrauen. unter mysql können sehr wohl spalten mit angezeigt werden, die weder aggregat-funtion sind noch in der group by klausel vorkommen. sie müsen halt nur alle den gleich wert in der jeweiligen gruppierung besitzen. damit will sich mysql ein sortierungen ersparren. und wenn alle werte gleich sind, dann klappt das auch mit der zufälligen auswahl....
Ilja