Avatar billede jacob_m Nybegynder
08. august 2004 - 16:13 Der er 9 kommentarer og
1 løsning

Variable variabler :-S

Hey...

Jeg har 2 databaser, den ene med en masse brugernavne (og tilhørende bruger-info irv.) og den anden med en masse info om filer uploadet af brugere fra databasen...

Nu er jeg så igang med at skrive en funktion som skal skabe mig et overblik over hvor meget hver enkelt bruger har uploadet og forbruger af plads. Jeg har skrevet denne funktion

--------------------- FUNKTION -----------

function brugernes_plads () {
connect(); // Forbinder til MySQL

$select_bruger = mysql_query ("SELECT * FROM `XXXxxx` ") or die mysql_error()); //Hiver data ud om hver enkelt bruger

while($r_brugere = mysql_fetch_array($select_bruger)) {//Starter whileløkke for hver bruger

$brugernavn = $r_brugere["brugernavn"];

$select_filer = mysql_query ("SELECT * FROM `notat_filer` WHERE bruger='$brugernavn' ") or die (mysql_error()); //Hiver data ud om filerne fra hver enkelt bruger

while($r_filer = mysql_fetch_array($select_filer)) { //Starter whileløkke for hver enkelt fil, om startes til hver enkelt bruger!


$str = $r_filer["str"];

$bruger_str = $bruger_str + $str; //Filstørrelsen adderes

}; //While-løkke FIL lukkes

echo "$brugernavn --> $bruger_str"; //Udtræk skrives!!
echo "<br>";


}; //While-løkke BRUGER lukkes

close(); //MySQL Lukkes

}; //Funktion lukkes

-------------------------------------------------------------

Nu kan de fleste nok gætte hvad mit problem er !!
Da variablen $bruger_str genbruges hele tiden bliver filstørrelsen ikke korrekt, istedet adderes den sidstenævnte bruger´s filstørrelse med den næste i rækken osv...

Hvordan får jeg lavet én forskellig variabel til hver enkelt bruger!! Så udtrækket bliver korrekt!
Avatar billede knudx Nybegynder
08. august 2004 - 16:33 #1
Du kan klare det hele med én query:

SELECT xxx.bruger, SUM(fil_notat.str) FROM xxx, fil_notat WHERE fil_notat.bruger=xxx.brugernavn GROUP BY xxx.bruger

tror jeg nok... prøv evt i sql kategorien.
Avatar billede coderdk Praktikant
08. august 2004 - 16:47 #2
Før din while() sæt $bruger_str = 0 ?

Eller bedre:

Ændr $bruger_str[ $brugernavn ] += $str;

Prøv så til slut at se strukturen af array'et:

echo "<pre>";
var_dump( $bruger_str );
Avatar billede jacob_m Nybegynder
08. august 2004 - 17:00 #3
Nu har jeg fået MySQL´en til at virke.. Weee...

Hvordan for jeg den skrevet ind i PHP, kan da ikke bruge mysql_fetch_array(); !!
Avatar billede coderdk Praktikant
08. august 2004 - 20:47 #4
Eerh, hvorfor kan du ikke bruge den?
Avatar billede knudx Nybegynder
08. august 2004 - 22:07 #5
Husk at SQL query i php er en tretrinsraket f.x.:

//1.sql
$sql = "SELECT ...";
//2.MySQL query
$udtr = mysql_query ($sql) or die (mysql_error()."<br><br>$sql");
//3.behandl udtræk
while ($row = mysql_fetch_array($udtr)) {
    echo $udtr['...'];
}
Avatar billede knudx Nybegynder
08. august 2004 - 22:09 #6
forkert... sidste tre linier igne
while ($row = mysql_fetch_array($udtr)) {
    echo $row['...'];
}
Avatar billede coderdk Praktikant
08. august 2004 - 22:39 #7
Desuden, hvis du kun hiver data ud med $row['feltnavn'] så brug mysql_fetch_assoc() i stedet for mysql_fetch_array()

Prøv med:

$sql = "SELECT brugernavn, SUM(fil_notat.str) as filsum FROM XXXxxx x INNER JOIN fil_notat f ON x.brugernavn = f.bruger GROUP BY x.bruger";
$qh = mysql_query( $sql );
while ( $row = mysql_fetch_assoc( $qh ) )
{
  echo "$row[brugernavn] = $row[filsum]<br>";
}
Avatar billede coderdk Praktikant
08. august 2004 - 22:40 #8
Uhm, SQL'en rettes til:

$sql = "SELECT x.brugernavn, SUM(f.str) AS filsum FROM XXXxxx x INNER JOIN fil_notat f ON x.brugernavn = f.bruger GROUP BY x.brugernavn";
Avatar billede jacob_m Nybegynder
10. august 2004 - 18:46 #9
Har fundet mit problem.. Det var fordi jeg ikke var kendt med funktionen "AS" i SQL og derfor havde svært ved at trække noget ud :-P.. Men det er løst!!

Syntes det er på tide der kommer nogle svar :D

/Jacob...
Avatar billede coderdk Praktikant
10. august 2004 - 19:16 #10
AS er smart :)

Og værsgo!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester