mySQL: storlek (KB) på resultat

Tråden skapades och har fått 4 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Stockholm
  • 2005-08-21 10:09

Skulle vilja ha samma funktion som 99mac har för hur många filer man laddat upp, fast i form av hur mycket information man sparat i en databas.
Har ett system med massor av användare där de kan spara hur mycket de vill i databasen just nu men skulle vilja begränsa dem till säg 50kb/person.

OBS, dom har inte en varsin databas utan användarna arbetar mot ett vanligt html-formulär och alla sparar sin information i samma tabeller som de andra (med sitt användar-id).

Vänligen
Ivar

  • Medlem
  • Sollefteå
  • 2005-08-21 16:24

Du får nog lov att göra något i stil med

SELECT Sum(Length(theStringField)) FROM myTable WHERE userId=4711

för att se hur mycket plats användare 4711 har använt i tabellen. Detta såvida du bara har en sträng i tabellen och övriga fält (intar och annat skit) inte tar upp nån större plats i jämförelse.

Har du flera strängar kan du ju göra nåt i stil med Sum(Length(theStringField1)+Length(theStringField2))

Om andra saker än strängar tar upp plats så får du lögga på det värdet oxo. Borde kunna fungera med nåt i stil med

SELECT Sum(Length(theStringField))+Count(*)*40 FROM myTable WHERE userId=4711

om övrig fixsize-data på varje rad alltid tar upp 40 bytes.

  • Medlem
  • Stockholm
  • 2005-08-21 17:01

Okej, hade hoppats att det fanns någon funktion i PHP som kunde beräkna storleken i KB på ett resultset men tack för hjälpen i alla fall, inte så sugen på att skriva funktionen dock

  • Medlem
  • Sollefteå
  • 2005-08-21 17:22

Instinktivt så känns det inte vettigt att låta php ta hand om storleksberäkningen. Att blåsa över hela resultsettet från mysql till php för att beräkna är resursslösande så det stänker om det. Det är en uppgift som helst ska göras internt i sql-servern utan att behöva skyffla mängder av data.

Fast vid närmare eftertanke så sa du 50 k i ditt exempel så i det här fallet så skulle man kunna göra det...

Loopa hela resulsettet med tex mysql_fetch_row() och sedan gör du en mysql_fetch_lengths() och adderar ihop alla värden för varje rad.

  • Medlem
  • Stockholm
  • 2005-08-21 18:57

Det har du förstås rätt i!

Tycker det är lite underligt att det inte finns något inbyggt stöd för att ta reda på hur många kb sitt resultset är... har en tjock sql-bibel, ska leta lite

Men du har som sagt rätt, får inte bli för resurskrävande så det blir nog till att köra din metod ändå!

Vänligen
Ivar

1
Bevaka tråden