höchsten Wert mit group by abrufen
Twilo
- datenbank
Hallo,
+-----------------+ +--------------------+
| t_wert | | t_produkt_has_wert |
+-----------------+ +--------------------+
| _wert_id | | _wert_id |
+-----------------+ +--------------------+
| _bezeichnung | | _produkt_id |
+-----------------+ +--------------------+
| _eigenschaft_id |
+-----------------+
| _aktuelle_id |
+-----------------+
es existiert ein UNIQE INDEX auf t1._eigenschaft_id und t1._wert_id
ich möchte alle Datensätze mit den höchsten Wert in t1.s3
mein Ansatz ist nicht ganz richtig
wie müßte ich den abändern?
SELECT t1._wert_id , t1._bezeichnung
FROM t_wert t1
INNER JOIN t_produkt_has_wert t2 ON t1._wert_id = t2._wert_id
WHERE t1._aktuelle_id IS NULL AND t2._produkt_id =1
GROUP BY t1._eigenschaft_id
wie und wo muss ich da die Funktion max() verwenden?
mfg
Twilo
Hallo,
+-----------------+ +--------------------+
| t_wert | | t_produkt_has_wert |
+-----------------+ +--------------------+
| _wert_id | | _wert_id |
+-----------------+ +--------------------+
| _bezeichnung | | _produkt_id |
+-----------------+ +--------------------+
| _eigenschaft_id |
+-----------------+
| _aktuelle_id |
+-----------------+
| _prioritaet |
+-----------------+
der UNIQUE INDEX ist über t_wert._eigenschaft_id und t_wert._prioritaet
mfg
Twilo
Hallo,
geht das etwas besser als diese Lösung?
SELECT t1._wert_id, t1._bezeichnung
FROM t_wert t1
INNER JOIN t_produkt_has_wert t2 ON t1._wert_id = t2._wert_id
WHERE t1._aktuelle_id IS NULL
AND t2._produkt_id =1
AND t1._prioritaet = (
SELECT max(t3._prioritaet)
FROM t_wert t3
INNER JOIN t_produkt_has_wert t4 ON t3._wert_id = t4._wert_id
WHERE t3._eigenschaft_id = t1._eigenschaft_id
AND t4._produkt_id =1
AND t3._aktuelle_id IS NULL
GROUP BY t3._eigenschaft_id
)
mfg
Twilo
Hallo Twilo,
geht das etwas besser als diese Lösung?
möglicherweise, wenn Du uns verrätst, was Du genau haben willst. Aus Deiner Beschreibung werde ich nicht schlau :-(
Am besten wären ein paar Beispieldatensätze in Deinen Tabellen und das von Dir gewünschte Ergebnis mit der Begründung, warum dies das gewünschte Ergebnis ist.
Freundliche Grüße
Vinzenz
yo,
grunsätzlich setzte du die GROUP BY Klausel falsch ein. Ein altes und leidiges Thema, dass unter mysql keine Fehlmeldung kommt. Auch gibt deine Unterabfrage mehrere Werte zurück und das bei einer Zuweisung. Da sollte selbst mysql meckern.
zum anderen finde ich die spalte s3 gar nicht in deiner Tabellenbeschreibung. Und so ganz ist mir so wie Vinzenz auch nicht dein Ziel klar. aber hier mal ein schuss ins blaue:
SELECT t1.*
FROM t_wert t1
WHERE t1.s3 = (SELECT MAX(t2.s3) FROM t_wert1 t2)
Die Abfrage gibt dir alle Datesätze der Tabelle t_wert aus, die den maximalen Wert der Spalte s3 haben. eventuell JOINS und weitere Bedinungen kannst du hinzufügen.
Ilja
Hallo,
Die Abfrage gibt dir alle Datesätze der Tabelle t_wert aus, die den maximalen Wert der Spalte s3 haben. eventuell JOINS und weitere Bedinungen kannst du hinzufügen.
sorry, ich wollte zuerst alle Spalten kürzen, also S1 -Sn, nur schien mir das ganze dann etwas zu unverständlich...
dieses S3 muss mir ganz entgangen sein :-(
an diesen Tag muss ich einen Denkfehler gehabt haben, denn meine Abfrage mußte ganz anders lauten
damit war diese auch nicht mehr so kompliziert :-)
SELECT t1._eigenschaft_id, t1._wert_id
FROM t_wert t1
INNER JOIN t_produkt_has_wert t2 ON t1._wert_id = t2._wert_id
WHERE t1._aktuelle_id IS NULL AND t2._produkt_id =%d AND t2._standard = 1
GROUP BY t1._eigenschaft_id
wäre diese Abfrage ok?
das GROUP BY habe ich eingefügt, damit ich nur ein Ergebnis pro t1._eigenschaft_id bekomme, falls bei einer Eigenschaft mehrere Standards gesetzt sind
ein Problem hab ich noch, was ich im Moment per PHP löse
wenn bei einer Eigenschaft kein Standard ausgewählt wird, erhalte ich keien _wert_id für die Eigenschaft
kann man das SQL Statement irgendwie dahin abändern, dass er mir dann sagen wir mal z.b. die kleinste/größte _wert_id von dieser Eigenschaft abruft?
mfg
Twilo