Avatar billede webcreator Nybegynder
30. maj 2003 - 21:27 Der er 22 kommentarer og
1 løsning

Sammenlæg værdier fra DB

Hej.

Jeg har en kolonne i min DB, som vi passende kan kalde points.

For hver post, der bliver uploaded af fx. Mr.X, tildeles der points. Hvordan sammenlægger jeg disse værdier for Mr. X ?

Findes der en smart SQL streng ? Eller skal jeg lave en form for while-løkke, der køre DB'en igennem, og plusser tallene ?
Avatar billede erikjacobsen Ekspert
30. maj 2003 - 21:31 #1
select navn,sum(points) as ialt from dintabel group by navn
Avatar billede webcreator Nybegynder
30. maj 2003 - 21:33 #2
smart. tænkte nok der var noget i den retning :)
Avatar billede webcreator Nybegynder
30. maj 2003 - 21:35 #3
Behøves jeg "group by navn" ?

Hvordan udskrives værdien ?
Avatar billede roenving Novice
30. maj 2003 - 21:37 #4
select sum(points) as ialt from dintabel where navn='Mr. X'

når du kun skal have den for een
Avatar billede webcreator Nybegynder
30. maj 2003 - 21:41 #5
Roenving > Ja, det kan jeg nok regne ud :)

Jeg vil vide hvordan den udskrives.

Sådan ? :

$t = mysql_query("select $user,sum(kara) as ialt from uploads");
echo $t["ialt"];

eller har jeg misforstået det der "as ialt" ?
Avatar billede postndk Nybegynder
30. maj 2003 - 21:45 #6
$t = mysql_query("SELECT sum(points) as ialt from uploads where user = 'kara'");
$r = mysql_fetch_array($t);
echo $r[ialt];
Avatar billede styrup-dk Nybegynder
30. maj 2003 - 21:46 #7
Prøv med:
$t = mysql_fetch_array(mysql_query("select navn,sum(points) as ialt from uploads where navn='Mr. X'"));
Så ligger navnet i $t[navn] og summen af points ligger i $t[ialt]
Avatar billede postndk Nybegynder
30. maj 2003 - 21:48 #8
styrup-dk > der er jo ingen grund til at hente navn ud af databasen når du alligevel bruger det i din WHERE clause ...
Avatar billede webcreator Nybegynder
30. maj 2003 - 21:49 #9
Det var jo netop det jeg skrev.

PostnDK > Hvorfor sætter du pointsne til at være user ? Kara = karakter..

Så prøver jeg lidt igen :)
Avatar billede webcreator Nybegynder
30. maj 2003 - 23:11 #10
Hvad er der galt med min kode her :

    <?php
   
    $user = $_REQUEST["user"];
   
    $conn = mysql_connect("localhost", "jemt", "mscool") or die(mysql_error());
    mysql_select_db("jemt");
    $o = mysql_query("select * from users");
    $p = mysql_query("select $user,sum(kara) as ialt_kara from uploads");
    $q = mysql_query("select $user,sum(side) as ialt_side from uploads");
    $r = mysql_query("SELECT COUNT(*) AS antal from uploads where user = '$user'");
   
    $antal = $r["antal"];
    $kara = $p["ialt_kara"]/$antal;
    $side = $q["ialt_side"]/$antal;
   
    $navn = $o["navn"];
    $dato = $o["dato"];
   
    mysql_close($conn);
   
    echo $user;
    echo $antal;
    echo $kara;
    echo $side;
    echo $navn;
    echo $dato;
   
    ?>

Jeg får intet ud af min DB
Avatar billede erikjacobsen Ekspert
30. maj 2003 - 23:13 #11
efter en mysql_query skal du bruge fx mysql_fetch_array for at få den første
(og måske eneste) række.
Avatar billede webcreator Nybegynder
30. maj 2003 - 23:15 #12
Nå ja, dér er fejlen :) tak
Avatar billede webcreator Nybegynder
30. maj 2003 - 23:35 #13
Hm, jeg kan ikke fetch'e data'et fra de querys, hvor jeg benytter :
select $user,sum(kara).

Nogen der gider give et eksempel på, hvorledes disse kan hentes ?
Avatar billede erikjacobsen Ekspert
30. maj 2003 - 23:41 #14
Du har ikke et felt, der hedder $user. Derfor er der en fejl i
din forespørgsel. Du kender godt tricket:

$p = mysql_query("select $user,sum(kara) as ialt_kara from uploads") or die(mysql_error());

ellers får du ikke at vide når noget går galt med din sql-sætning.

Hvad er det du skal beregne i de to sætninger med $user?
Avatar billede webcreator Nybegynder
30. maj 2003 - 23:58 #15
Nej, det har du jo ret i.

Det er nu rettet. Jeg har derfor flg :
mysql_query("select user,sum(kara) as ialt_kara GROUP BY navn from uploads where user = '$user'") or die(mysql_error());

Jeg forstår bare ikke hvad "GROUP BY navn" skal gøre godt for. Jeg forsøgte uden, hvilket gav fejl. Er der nogen fejl i linien nu ?
Avatar billede erikjacobsen Ekspert
31. maj 2003 - 00:00 #16
Hvis du skal have for én bruger, behøver du blot

mysql_query("select sum(kara) as ialt_kara from uploads where user = '$user'") or die(mysql_error());

Og så stod din group by et forkert sted i sætningen ;)
Avatar billede webcreator Nybegynder
31. maj 2003 - 00:03 #17
Ah, IC. Tak. Prøver lige med det nye så :)
Avatar billede webcreator Nybegynder
31. maj 2003 - 00:33 #18
Virker stadig ikke. Kode :

    $p = mysql_query("select sum(kara) as ialt_kara from uploads where user = '$user'") or die(mysql_error());
      $resp = mysql_fetch_array($p);

while ($resp = mysql_fetch_array($p)) {
    $kara = $resp["ialt_kara"];
    }
Avatar billede webcreator Nybegynder
31. maj 2003 - 00:33 #19
Jeg er ikke klar over, om jeg skal have en sådan While-sætning. Hvad siger I ?
Avatar billede erikjacobsen Ekspert
31. maj 2003 - 00:35 #20
$p = mysql_query("select sum(kara) as ialt_kara from uploads where user = '$user'") or die(mysql_error());
$resp = mysql_fetch_array($p);
$kara = $resp["ialt_kara"];

Der er præcis een række pga count - du skal ikke have en while.
Avatar billede webcreator Nybegynder
31. maj 2003 - 00:39 #21
Perfekt. Nu virker det. Tak :)

Jeg har afsat 5 points mere, i håb om, at der er en af jer, der kan svare mig på, hvordan jeg begrænser antallet af decimaler efter et komma. Jeg dividere to tal, og få noget a la : 1.2856493067. Vil kun have 2 tal efter kommaet
Avatar billede erikjacobsen Ekspert
31. maj 2003 - 00:41 #22
Avatar billede webcreator Nybegynder
31. maj 2003 - 00:46 #23
mange tak :)
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