max() von gleichen Werten in einer Tabelle

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • max() von gleichen Werten in einer Tabelle

    Hoffe, das wird jetzt verständlich:

    Habe Folgende Tabelle:

    1 val1 xxx a
    2 val2 xxx b
    3 val3 xxx c
    4 val4 yyy a
    5 val5 yyy b
    6 val6 zzz a


    Die Tabelle ist ewig lang und soll variabel bleiben, deswegen möchte ich hein SELECT * FROM verwenden (ich will nicht die Felder selbst ansprechen)

    Ich brauche ein JOIN, HAVING, GROUP BY, MAX() oder WHERE haben, der mir einerseits die Werte wieder gibt, bei der die dritte Spalte nur einmal vorkommt, davon aber der mit dem höchsten Wert der 4. Spalte,

    meint, folgendes Ergebnis will ich haben:

    3 val3 xxx c
    5 val5 yyy b
    6 val6 zzz a


    Geht das??? Gruß, Hell
    ...hell is just a name, not the devil...

  • #2
    in mysql4+ müsste das so sein.
    Code:
    SELECT
        *
    FROM
        tabelle
    WHERE spalte4 IN (SELECT DISTINCT spalte4 FROM tabelle)
    bin mir aber mit dem IN nicht sicher...

    bei mysql<4 musst du zwei queries machen.
    Code:
    SELECT DISTINCT spalte4 FROM tabelle;
    // nun auslesen. und die 2. query
    SELECT
        *
    FROM
        tabelle
    WHERE spalte4 IN ('a','b','c')
    wobei 'a','b','c' aus der 1. query zusammengestellt wurde.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      PHP-Code:
      $tabelle 'meinetabelle';
      // Feldnamen ermitteln
      $sqlres mysql_query("show fields from $tabelle");
      $feld = array();
      while (
      $row mysql_fetch_assoc($sqlres))
        
      $feld[] = $row['Field'];
      // Auswahl
      $sql "SELECT * FROM $tabelle
        GROUP BY 
      $feld[2]
        HAVING 
      $feld[3] = MAX($feld[3])";
      $sqlres mysql_query($sql)
        or die (
      "<b>$sql</b>: "mysql_error());
      // auflisten
      echo '<table border="1"><tr>
        <th>, implode('
      </th>
        <
      th>', $feld), '</th>
      </
      tr>';
      while ($row = mysql_fetch_assoc($sqlres))
        echo '
      <tr>
        <
      td>', implode('</td>
        <
      td>', $row), '</td>
      </
      tr>';
      echo '
      </table>'; 
      Könnte sein, dass du 'group by' und having vertauschen musst.

      Wie immer ist der Code nicht getestet und wird hier ohne Gewähr gepostet.
      mein Sport: mein Frühstück: meine Arbeit:

      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

      Kommentar

      Lädt...
      X