php mysql maximum

  • folgende situation:
    ich habe eine tabelle mit mehreren spalten und ich will aus einer dieser spalten den maximalen numerischen wert auslesen.

    zur verdeutlichung:
    2
    5
    4
    6
    8
    ausgelesen soll der wert 8 werden.
    wie kann ich das mit php-mysql realisieren?

    :thumb: Ich bin positiv eingestellt, sogar meine Blutgruppe ist positiv!

  • du kannst das in SQL machen: max(spalten_name) holt dir den höchsten wert heraus

    Four stages of acceptance:
    1.) this is worthless nonsense
    2.) this is interesting, but perverse, point of view
    3.) this is true, but quite unimportant
    4.) I alwas said so
    J.B.S. Haldane

  • hm wenn der wert in einer einzelnen spalte steht.... würd auch ORDER BY 'spalte' DESC gehn. der erste wert is deiner... aber max is natürlich hübscher..... aber nicht vergessen, bei aggregatfunktionen immer ein GROUP BY verwenden, dass hätt mich fast die positive Note bei Datenbanksysteme gekostet. :) *gggg*

    lg, Phil.

    Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders!
    http://www.chuckbronson.net/

  • es stehen die werte 0 und 1 in der spalte
    dies sind rechnungsnummern

    der code den ich verwende:
    $max_order_number = tep_db_query("select max(order_number) from " . TABLE_ORDERS . " GROUP BY order_number");
    while($zeile = @ mysql_fetch_array($max_order_number))
    {
    echo "<b>Rechnungsnummer:</b> " . $zeile['order_number'];
    }

    ergebnis:
    Rechnungsnummer:
    Rechnungsnummer:

    was ich haben will:
    1

    warum funkt das nicht?

    :thumb: Ich bin positiv eingestellt, sogar meine Blutgruppe ist positiv!

  • ich würde mal mit print_r nachsehen, welche werte mit welchen spaltennamen von der db geliefert werden. ich würde nämlich darauf tippen, daß sie spalte max(spalte) heißt und nicht order_number.

    lg

  • Zitat von IT-Max

    der code den ich verwende:

    PHP
    $max_order_number = tep_db_query("select max(order_number) from " . TABLE_ORDERS . " GROUP BY order_number");

    warum gruppierst du nach ordner_number? das bedeutet ja, dass du dein abfrageergebnis in gruppen gleichen wertes von ordner_number einteilst... die max-aggregatfunktion ruft dann von der jeweiligen gruppe den größten wert von ordner_number ab, das ist in der gruppe mit ordner_number=0 eben 0 und mit ordner_number=1 eben 1.

    ergo: kübel die group by-klausel, und probier es nochmal.

  • hab die group by klausel gekübelt.

    ist ergebnis:
    Rechnungsnummer:

    soll Ergebnis:
    Rechnungsnummer: 1

    das ist der lösung schon ein bißchen näher aber es is doch noch nicht ganz die Lösung.
    werd noch verrückt!

    :thumb: Ich bin positiv eingestellt, sogar meine Blutgruppe ist positiv!

  • Zitat von IT-Max
    Code
    select max(order_number) from ...
    
    
    ...
    
    
    echo "<b>Rechnungsnummer:</b> " . $zeile['order_number'];
    
    
    ...

    funkt das nicht?


    nein funkt wahrscheinlich nicht. Ob das Ergebnis der Aggragtsfunktion in einer Spalte namens "order_number" geliefert wird ist datenbankabhängig, aber wahrscheinlich ist es nicht.

    Lösung:

    Code
    SELEC MAX([I]<spaltenname>[/I]) [B]AS [I]<gewünschter Name>[/I][/B] FROM ...
    ...
    echo "<b>Rechnungsnummer:</b> " . $zeile["[I]<gewünschter Name>[/I]"];
  • Zitat von IT-Max

    das ist der lösung schon ein bißchen näher aber es is doch noch nicht ganz die Lösung.

    look post #6

    schreib also entweder

    PHP
    $zeile['max(order_number)'];

    statt

    PHP
    $zeile['order_number'];


    oder

    PHP
    $max_order_number = tep_db_query("select max(order_number) as order_number from " . TABLE_ORDERS);

    statt

    PHP
    $max_order_number = tep_db_query("select max(order_number) from " . TABLE_ORDERS);
  • danke danke

    richtige lösung:
    $max_order_number = tep_db_query("select max(order_number) as order_number from " . TABLE_ORDERS);

    :thumb: Ich bin positiv eingestellt, sogar meine Blutgruppe ist positiv!

  • Zitat von IT-Max

    $max_order_number = tep_db_query("select max(order_number) as order_number from " . TABLE_ORDERS);

    brauchst du nicht extra einzufärben, dazu gibts ein eigenes PHP-tag :p

  • leider steh ich schon wieder vor dem nächsten problem.

    $max_order_number = tep_db_query("select max(order_number) as order_number from " . TABLE_ORDERS);

    ich will jetzt zusätzlich zu der maximalen order_number auch die zugehörige order_id abrufen. das befindet sich also alles in einer zeile und sollte daher kein problem sein. wie kann ich das machen?

    :thumb: Ich bin positiv eingestellt, sogar meine Blutgruppe ist positiv!

  • auf diese lösung ist das DBAI besonders stolz:

    Code
    select order_number, order_id from table_order where order_number>=all(select order_number from table_order)

    man beachte, dass das ergebnis mehrere datensätze umfasst, wenn die größte order_number mehrmals vorkommt.

    wenn du aber ein MySQL verwendest, das keine subqueries kann:

    Code
    select order_number, order_id from table_order order by order_number desc limit 0,1

    hat allerdings das problem, dass nur ein datensatz ausgegeben wird. du könntest mit hilfe von PHP zwei queries ausführen:

    PHP
    $result=mysql_query("select max(order_number) as order_number from ".TABLE_ORDERS);
    if(mysql_num_rows==1) {
        $line=mysql_fetch_array($result);
        $max_order_number=$line['order_number'];
        mysql_free_result($result);
    
    
        $result=mysql_query("select order_number, order_id from ".TABLE_ORDERS." where order_number=$max_order_number");
    }

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!