MySQL Max

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

  • 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!

    Kommentar


    • #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)

      Kommentar


      • #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

        Kommentar


        • #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"); 
          Zuletzt geändert von arkos; 02.11.2007, 13:25.
          **********
          arkos
          **********

          Kommentar


          • #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!
            Zuletzt geändert von KageMurai; 02.11.2007, 13:29.

            Kommentar


            • #7
              deswegen das

              PHP-Code:
              as id 
              s.o.

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

              Kommentar

              Lädt...
              X