Twilo: höchsten Wert mit group by abrufen

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

  1. Hallo,

    MySQL 4.1.21 steht zur Verfügung

    mfg
    Twilo

  2. 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

    1. 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

      1. 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

      2. 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

        1. 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