phpbar.de logo

Mailinglisten-Archive

[php] Optimierung einer SQL Funktion

[php] Optimierung einer SQL Funktion

Sebastian Bergmann sebastian.bergmann_(at)_web.de
Sat, 29 Apr 2000 22:37:26 +0200


Folgendes Problem: Ich habe eine Tabelle, in welche ich Strings legen
möchte. Wenn ein String schon in der Tabelle ist so möchte ich, daß ein
anderes Feld in der Zeile mit dem String um Eins erhöht wird.

Ich habe mir da die folgende Funktion zu geschrieben, bin mir aber
ziemlich sicher, daß das noch einfacher / eleganter geht:

    function updateTable( $table, $field, $string, $mode = 1 )
    {
      // check, if this string already has an entry
      $this->db->query( "select count(*) as number from $table
                         where $field = '$string'" );
      $this->db->Next_Record();

      // string already has an entry, update it
      if( $this->db->f( "number" ) > 0 )
      {
        // get data
        $this->db->query( "select * from $table
                           where $field = '$string'" );
        $this->db->Next_Record();

        // get string's id
        $id = $this->db->f( "ID" );

        // update data
        if( $mode == 1 )
        {
          $hits = $this->db->f( "HITS" ) + 1;
          $this->db->query( "update $table set HITS = '$hits'
                             where ID = '$id'" );
        }

        // return result
        return $id;
      }

      // string has no entry yet, create one
      else
      {
        $this->db->query( "insert into $table ( $field )
                           values( '$string' )" );
        return $this->updateTable( $table, $field, $string, 0 );
      }
    }

Hier ein Beispiel für die Art von Tabelle auf die updateTable()
angewendet werden soll:

  CREATE TABLE phpOpenCounter_agents (
    ID int(8) NOT NULL auto_increment,
    USER_AGENT char(255) NOT NULL,
    HITS int(11) DEFAULT '1' NOT NULL,
    PRIMARY KEY (ID),
    KEY ID (ID),
    UNIQUE USER_AGENT (USER_AGENT)
  );

AHA

-- 
 Sebastian Bergmann
 
 Homepage : http://gravedancer.rc5.de \ eMail: sebastian.bergmann_(at)_web.de
 Fax/Voice: +49 180 50 52 54 04 86 39 \ Mobil: +49 170 125 85 78



php::bar PHP Wiki   -   Listenarchive