MySQL Max

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • MySQL Max

    Hi,

    PHP Code:
    class DB {
         private 
    $connection;
         static private 
    $instance;
         
         static public function 
    construct() {
              if (!
    self::$instance) {
                   
    self::$instance = new DB();
              }
              return 
    self::$instance;
         }
         public function 
    connect() {
              include (
    "configs.php");
              
    $this->connection mysql_connect($server,$user,$pass) or die(mysql_error());
              
    mysql_select_db($db,$this->connection) or die(mysql_error()); 
         }
         public function 
    query($query) {
              
    $ergebnis mysql_query($query,$this->connection) or die(mysql_error());
              return 
    $ergebnis;
         }
         public function 
    close() {
              
    mysql_close($this->connection);
         }
    }

    class 
    Board {
         public 
    $Subboard = array();
         public 
    $Themen = array();
         public 
    $Antworten = array();

         function 
    show() {
              
    $DB DB::construct();
              
    $DB->connect();
              
    $ergebnis $DB->query("SELECT subboard,threads,answers FROM board");
              while (
    $res=mysql_fetch_assoc($ergebnis)) {
                   
    $this->Subboard[] = $res['subboard'];
                   
    $this->Themen[] = $res['threads'];
                   
    $this->Antworten[] = $res['answers'];
              }
              
    $DB->close();
         }
         
         function 
    addBoard($wert) {
              
    $DB DB::construct();
              
    $DB->connect();
              
    $DB->query("INSERT INTO board (subboard,threads,answers) VALUES ('nedias','5','20')");
              
    $DB->close();
         }
         
         function 
    getMax() {
              
    $DB DB::construct();
              
    $DB->connect();
              
    $ergebnis $DB->query("SELECT MAX(id) FROM board");
              
    $DB->close();
              return 
    $ergebnis;
         }

    Die Klasse DB instanziere ich so:

    PHP Code:
    $Board = new Board();
    $Board->show();
    $max $Board->getMax(); 
    Frage: Wieso wird, wenn in der Tabelle board 3 Zeilen vorhanden sind und die Spalte id als Primärschlüssel festgelegt ist mit auto_increment nicht eine 3 an $max übergeben??? Was muss ihc ändern, damit dort eine 3 übergeben wird?

    Vielen Dank!

    KageMurai

  • #2
    Weil bei auto_increment nicht zwangsläufig fortlaufend nummeriert wird. Wenn du z.B. nachträglich Zeilen löschst, entstehen Lücken.
    Ich weiß zwar nicht so genau, was du mit diesem MAX Wert machen willst, aber vielleicht willst du COUNT benutzen oder mysql_insert_id.
    hopka.net!

    Comment


    • #3
      Frage: Wieso wird, wenn in der Tabelle board 3 Zeilen vorhanden sind und die Spalte id als Primärschlüssel festgelegt ist mit auto_increment nicht eine 3 an $max übergeben??? Was muss ihc ändern, damit dort eine 3 übergeben wird?
      Weil die ID nix mit der Anzahl Datensätze zu tun hat. Du kannst z.B. MAX id 1024 bekommen und trotzdem nur einen count(row) von 2. Wenn du IDs löscht dann kann es zu Löchern zwischen den IDs kommen.
      Du willst die Anzahl Datensätze in der Tabelle? Dann verwende count()

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Comment


      • #4
        Hmm, sicher ist, dass in dieser Tabelle nichts gelöscht wird, daher ist es eigentlich egal. Aber selbst wenn ich SELECT COUNT(id) FROM board verwende, erhalte ich an $ergebnis immer nur Resource ID#8 zugewiesen. Ich möchte aber bitte dort die 3 stehen haben, wenn 3 Zeilen vorhanden sind. Was mache ich falsch?

        Danke!

        KageMurai

        Comment


        • #5
          ahso...
          dann schreib doch noch ma dazu:

          PHP Code:
          $row mysql_fetch_assoc$ergebnis );
          //und dann erst
          return $ergebnis[id]; 
          edit: solltest aber ggf dennoch mit count arbeiten... je nach dem, was du wissen willst.

          was war die letzte id = max()
          wieviele boards hab ich überhaupt = count()


          edit2:
          evtl auch noch folgendes ändern (bin ich mir gerade nicht sicher):
          PHP Code:
          $ergebnis $DB->query("SELECT MAX(id) as id FROM board"); 
          Last edited by arkos; 02-11-2007, 12:25.
          **********
          arkos
          **********

          Comment


          • #6
            Ihr werdet lachen, aber es funktioniert nicht. Ich habe die Funktion getMax() so abgeändert:

            PHP Code:
            function getMax() {
                      
            $DB DB::construct();
                      
            $DB->connect();
                      
            $ergebnis $DB->query("SELECT COUNT(id) FROM board");
                      
            $row=mysql_fetch_assoc($ergebnis);
                      
            $DB->close();
                      return 
            $row['id'];
                 } 
            Die Spalte id ist vorhanden! Trotzdem erhalte ich die Meldung:

            Notice: Undefined index: id in C:\xampp\htdocs\...\classes.php on line 59

            Ich verstehe es einfach nicht...

            EDIT: Funktioniert jetzt - danke!
            Last edited by KageMurai; 02-11-2007, 12:29.

            Comment


            • #7
              deswegen das

              PHP Code:
              as id 
              s.o.

              edit: edit nicht gesehen
              **********
              arkos
              **********

              Comment

              Working...
              X