1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

php mysql maximum

    • Frage
  • IT-Max
  • 14. Februar 2006 um 23:46
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • IT-Max
    Punkte
    155
    Beiträge
    19
    • 14. Februar 2006 um 23:46
    • #1

    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?

  • KeinWunder
    Punkte
    490
    Beiträge
    90
    • 14. Februar 2006 um 23:51
    • #2

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

  • bimbo
    Punkte
    2.320
    Beiträge
    390
    • 15. Februar 2006 um 08:45
    • #3

    die query schaut dann so aus:

    SQL
    SELECT MAX(spalte) FROM tabelle;
  • MarvinTheRobot
    Punkte
    7.308
    Beiträge
    1.368
    • 15. Februar 2006 um 08:48
    • #4

    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.

  • IT-Max
    Punkte
    155
    Beiträge
    19
    • 15. Februar 2006 um 15:04
    • #5

    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?

  • lerod
    Punkte
    1.620
    Beiträge
    315
    • 15. Februar 2006 um 15:13
    • #6

    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

  • Paulchen
    Gast
    • 15. Februar 2006 um 16:23
    • #7
    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.

  • IT-Max
    Punkte
    155
    Beiträge
    19
    • 15. Februar 2006 um 16:48
    • #8

    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!

  • zwutschkerl
    Punkte
    365
    Beiträge
    71
    • 15. Februar 2006 um 17:00
    • #9
    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]"];
  • Paulchen
    Gast
    • 15. Februar 2006 um 17:01
    • #10
    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);
  • IT-Max
    Punkte
    155
    Beiträge
    19
    • 15. Februar 2006 um 19:00
    • #11

    danke danke

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

  • Paulchen
    Gast
    • 16. Februar 2006 um 12:04
    • #12
    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

  • IT-Max
    Punkte
    155
    Beiträge
    19
    • 17. Februar 2006 um 19:24
    • #13

    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?

  • Paulchen
    Gast
    • 18. Februar 2006 um 11:59
    • #14

    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");
    }
  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum