20. december 2004 - 18:47
Der er
13 kommentarer og 2 løsninger
PHP/MySql - tæl sammen fra flere tabeller
Jeg har en stak mysql tabeller. #users -------- username note #runde1 -------- username total runde1 findes der 13 stk af. (runde2, runde3 osv) username Hvordan gør jeg så der bliver lavet en liste med alle "username" fra "users". Hvor tilsvarende "username" fra runde1-13 findes og "total" for den user lægges sammen fra alle "runde1-13" Det skal være så det ikke er nødvendigt, at en username er med i hver runde tabel. skal bare spytte en simple liste ud som denne: hans - 23 peter - 20 kirsten - 19 osv..
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
20. december 2004 - 19:31
#1
Den fattede jeg ikke lige? men tror du mener noget i stil med: $sql = "SELECT username FROM usertabel WHERE ORDER BY username asc"; $qh = mysql_query( $sql ) or die( "Unable to connect to SQL server" ); while ( $row = mysql_fetch_assoc( $qh ) ) { echo $row[username].'<br>'; }
20. december 2004 - 19:46
#2
Nej ikke lige sådan. kan godt se min forklaring blev lidt rodet. Jeg prøver lige at gøre det forståligt for andre end mig selv. Det skal lave en liste med alle brugere fra #users. Hver bruger findes i én eller flere af de 13 #runde1-13 og her har han en værdi(total) som skal lægges sammen for alle de #runde han er med i. feks $total = $total1 + $total4 + $total9 Så man til sidst kan udskrive en liste hvor brugernavn og dennes samlede værdi fremgår. Håber det er lidt mindre sluderet end det første.
20. december 2004 - 19:54
#3
Jeg tror det er noget med: $query = mysql_query("SELECT username FROM users"); while($row = mysql_fetch_assoc($query)) { $points = 0; for($i=1;$i<14;$i++) { $rundequery = mysql_query("SELECT total FROM runde".$i." WHERE username = ".$row['username']); while($row2 = mysql_fetch_assoc($rundequery)) { $points += $row2['total']; } } print($username." - ".$points); } Det skulle gerne give det ønskede resultat :)
20. december 2004 - 19:56
#4
Den her skal måske have ' ' på, sådan her: $rundequery = mysql_query("SELECT total FROM runde".$i." WHERE username = '".$row['username']."'"); ...men jeg regner med det fungerer :)
20. december 2004 - 20:46
#5
Jeg rettede en smule, da brugernavnet ikke blev udskrevet. $query = mysql_query("SELECT username FROM users"); while($row = mysql_fetch_assoc($query)) { $points = 0; for($i=1;$i<14;$i++) { $rundequery = mysql_query("SELECT * FROM runde".$i." WHERE user = '".$row['username']."' ORDER BY total"); while($row2 = mysql_fetch_assoc($rundequery)) { $points += $row2['total']; $username = $row2['user']; } } print($username." - ".$points); print "<br>"; } Hvordan kan man gøre så listen bliver sorteret efter "total"?
20. december 2004 - 22:02
#6
Sådan her: $userpoints = array(); $query = mysql_query("SELECT username FROM users"); while($row = mysql_fetch_assoc($query)) { $points = 0; $username = $row['username']; for($i=1;$i<14;$i++) { $rundequery = mysql_query("SELECT * FROM runde".$i." WHERE user = '".$username."'"); while($row2 = mysql_fetch_assoc($rundequery)) { $points += $row2['total']; } } array_push($userpoints, $points."|".$username."<br>"); } asort($userpoints); foreach($userpoints as $up) { list($upoints, $user) = explode("|", $userpoints); print($user." - ".$upoints); } :)
20. december 2004 - 22:03
#7
Hov: list($upoints, $user) = explode("|", $up); ..sådan der
20. december 2004 - 22:23
#8
En sidste ting, så er det helt perfekt. Når den sortere, så gør den det feks således: 10 12 1 22 37 3 ville gerne hvis det kunne laves, så den gjorde så feks 1 kommer før 10, og at den sorterede så det største kom øverst. 37 22 12 10 3 1 Det er mere end jeg først har spurgt efter, så er selvfølgelig villig til at smide flere point til dig :-) Mange tak for hjælpen
20. december 2004 - 22:58
#9
ok, jeg kan godt se den sorterer lidt åndssvagt. $userpoints = array(); $query = mysql_query("SELECT username FROM users"); while($row = mysql_fetch_assoc($query)) { $points = 0; $username = $row['username']; for($i=1;$i<14;$i++) { $rundequery = mysql_query("SELECT * FROM runde".$i." WHERE user = '".$username."'"); while($row2 = mysql_fetch_assoc($rundequery)) { $points += $row2['total']; } } if($points < 10) $points = "0".$points; array_push($userpoints, $points."|".$username."<br>"); } rsort($userpoints); foreach($userpoints as $up) { list($upoints, $user) = explode("|", $userpoints); print($user." - ".$upoints); } Jeg tror det er fikser nu :)
20. december 2004 - 23:02
#10
Den går helt amok. Den udskriver: - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array - Array
20. december 2004 - 23:09
#11
Endnu en gang... Hov: list($upoints, $user) = explode("|", $up); ..sådan der
20. december 2004 - 23:15
#12
Nu begynder jeg at føle mig lidt vanskelig :-( Det er helt perfekt fra én lille bitte ting. Når den feks skal skrive "1" så skriver den "01". Kan det undgåes? Jeg siger mange tak for din store tålmodighed og hjælp. Vil du have flere point, nu da opgaven blev mere tidskrævende end først tiltænkt?
21. december 2004 - 00:40
#13
Jamen, det er sådan lidt sjovt med de nuller... Vi sætter dem på her: if($points < 10) $points = "0".$points; For at den skal sortere rigtigt. Ellers kommer 1 før 12. Nu skal vi så pille dem af efter, der er sorteret. Vi kan ikke bruge en funktion, der fjerner nuller, for så vil f.eks 20 jo blive til 2. Derfor må vi bruge strpos. foreach($userpoints as $up) { list($upoints, $user) = explode("|", $up); if(strpos("".$upoints, "0") == 0) { $upoints = substr("".$upoints, 1); } print($user." - ".$upoints); } Det skal så ind under rsort(), der hvor noget af det er, så tror jeg den vil gøre det ! :) Du må lige prøve den af, for jeg ved ikke helt om den returnerer 0. Hvis den gør skal det være: foreach($userpoints as $up) { list($upoints, $user) = explode("|", $up); if(strpos("".$upoints, "0") == 0 && strpos("".$upoints, "0") !== false) { $upoints = substr("".$upoints, 1); } print($user." - ".$upoints); } ..eller sådan noget :)
21. december 2004 - 01:28
#14
BINGO :-) Mange tak
21. december 2004 - 01:36
#15
Selv tak :)
Vi tilbyder markedets bedste kurser inden for webudvikling