Mailinglisten-Archive |
>
> 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