phpbar.de logo

Mailinglisten-Archive

Speicherplatzberechnung

Speicherplatzberechnung

Robert John mysql-de_(at)_lists.bttr.org
Tue, 17 Sep 2002 23:47:38 +0200


>
> Ich habe eine Tabelle, auf die mehrere Benutzer
> Zugriff haben. Jeder dieser Benutzer kann in einem
> Textfeld quasi so viel schreiben, wie er möchte.
> Es ist also unklar, wie viel Text jeder Benutzer
> pro Datensatz einträgt.
> Nun existieren bereits rund 10.000 Datensätze und
> ich möchte nun den exakten Speciherplatz der
> gesamten Tabelle und den der jeweiligen Benutzer
> errechnen (lassen :-)).
>
> Ich habe im phpMyAdmin im Bereich der Tabellen-

> Kann man sowas auch ganz korrekt berechnen lassen?
>
> Also sowas wie
> SELECT WIEauchIMMER WHERE user like 'ich' ->
> Ergebnis: Menge der Bytes.

Hi,
da Textfelder vorhanden sind, Du etwas Aufwand:
ich würde mit php folgendes machen (war schon mal bei mir nötig und läuft
prima):

Habe ich bei mir per cronjob laufen lassen.
Du solltest das mal mit genau einem Datensatz laufen lassen, um einen
eventuellen Offset und Zeichenkettenende-Zeichen dazuaddieren zu können.

Es gibt auch den Befehl   show table status from datenbank (erst ab 3.23)
wo du dann die komplette "Data_length" hast (beachte row_format fixed und
dynamic)

Viel Spass

Robert

<?
  // sowas braucht man
  define(NL,"\r\n");
  define(BR,"<br>");

  // Datenbank-Verbindung
  include( "meine-db.inc" );

  // abzufragende Tabelle und Filter
  $table    = "Inhalt" ;
  $filter   = "WHERE id = '1234567' " ;

  $struktur = array();
  $i = 0;
  $query  = "SHOW fields FROM Inhalt ";
  $result = mysql_query( $query ) or die( $query );
  while( $row = mysql_fetch_row($result) )
  {
    list( $feldname, $feldtyp ) = $row ;
    $feldlaenge = ( ereg("([0-9]+)", $feldtyp, $erg ) ) ? $erg[0] : 0 ;

    $struktur[$i]["nam"] = $feldname ;
    $struktur[$i]["typ"] = $feldtyp  ;
    $struktur[$i]["len"] = $feldlaenge ;
    $i++;
  }

  // Kontrollausgabe
  // foreach($struktur as $wert )
  // { echo $wert["nam"] . " : " . $wert["typ"] . " : " . $wert["len"] . NL
; }

  $query  = "SELECT * FROM $table $filter ";
  $result = mysql_query( $query ) or die( $query );
  $summe  = 0 ;
  // Alle Sätze durchgehen
  while( $row = mysql_fetch_array($result) )
  {
    // für jeden Satz alle Felder abklappern
    foreach($struktur as $wert )
    {
      $name = $wert["nam"] ;
      $lang = $wert["len"] ;
      if   ($lang != 0)
      { $summe += $lang ; }
      else
      { $summe += strlen( $row["$name"] ) ;
        // echo $name . " (" . strlen( $row["$name"] ) . ") : " .
$row[$name] . NL ;
      }
    }
  }
  mysql_close();
  echo "Für die Bedingung $filter beträgt die Satzlänge in der Tabelle
'$table' insgesamt $summe Byte." . NL ;
?>

---
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive