Toon posts:

[php/mysql] Selecteren uit db + sorteren op aantal

Pagina: 1
Acties:
  • 100 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
hallo,

Ik heb een db met als velden id, naam, team

Er zitten 8 rijen in met de id's 1 t/m 8 en allemaal verschillende namen:

Elke naam heeft als volgt voor een team gekozen:

Sauber
Sauber
Ferrari
BAR
Jaguar
Sauber
Jordan
Ferrari


Je kunt dus zien dat sauber het populairste is en dat Ferrarie daarna moet komen. Hoe kan ik nou in php deze gegevens uit de database halen dat ik hetvolgende zie:

Sauber...%
Ferrari...%
BAR...%
Jaguar...%
Jordan...%


het moet namelijk een soort rankingsysteem worden

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 14-09 20:56
Op zaterdag 12 januari 2002 20:33 schreef Sinisa het volgende:
hallo,

Ik heb een db met als velden id, naam, team

Er zitten 8 rijen in met de id's 1 t/m 8 en allemaal verschillende namen:

Elke naam heeft als volgt voor een team gekozen:

Sauber
Sauber
Ferrari
BAR
Jaguar
Sauber
Jordan
Ferrari


Je kunt dus zien dat sauber het populairste is en dat Ferrarie daarna moet komen. Hoe kan ik nou in php deze gegevens uit de database halen dat ik hetvolgende zie:

Sauber...%
Ferrari...%
BAR...%
Jaguar...%
Jordan...%


het moet namelijk een soort rankingsysteem worden
Eerst uit DB vissen, dan gaan tellen welke hoevaak voorkomt (een array?), dan procenten bereken?

Verbouwing


  • _-= Erikje =-_
  • Registratie: Maart 2000
  • Laatst online: 09-09 15:42
PHP:
1
2
3
<?
SELECT count(*) from tabelnaam
?>

totaal aantal stemmen opvragen (nodig om % te berekenen)
PHP:
1
2
3
<?
SELECT COUNT(*) from tabelnaam GROUP BY team
?>

deze kweerie groepeerd eerst op team en telt dan hoeveel rijen er zijn (dus het aantal stemmen per team)

Verwijderd

Topicstarter
Klinkt logisch, even proberen

Verwijderd

Topicstarter
Ik snap het niet, doet zo vrij weinig
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$mysql = mysql_query("SELECT count(*) from userranking"); 
while ($regel = mysql_fetch_array($mysql)){
$team2 = $regel["team"]; // veld ophalen uit tabel

$mysql = mysql_query("SELECT COUNT(*) from userranking GROUP BY team"); 
while ($regel = mysql_fetch_array($mysql)){
$team = $regel["team"]; // veld ophalen uit tabel


echo"$team2";
}}
?>

wat doe ik fout?
waarschijnlijk iets ontzettends doms

  • _-= Erikje =-_
  • Registratie: Maart 2000
  • Laatst online: 09-09 15:42
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$mysql = mysql_query("SELECT count(*) AS aantal from userranking");
$row=mysql_fetch_array($mysql);

$totaal_aantal_stemmen= $row["aantal"]  //Het totaal aantal stemmen;

$mysql= mysql_query("SELECT COUNT(*) as aantal, team from userranking GROUP BY team");

while ($regel = mysql_fetch_array($mysql))
{
echo "Teamnaam".$regel["team"];
echo "Aantal stemmen".$regel["aantal"];
echo "Percentage".$regel["aantal"]/$totaal_aantal_stemmen;
}
?>

zoiets :)

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Probeer eens hiermee verder te wereken
PHP:
1
2
3
4
5
6
7
8
9
<?
$result = mysql_query("SELECT count(*) as totaal FROM userranking");
while($regel = mysql_fetch_array($result))
{
  $totaal = $regel["totaal"]; // veld ophalen uit tabel
}
// en
$result = mysql_query("SELECT COUNT(*) as aantal FROM userranking GROUP BY team");
?>

[edit]Ooh Erik geeft je al een concreet antwoord :P

  • _-= Erikje =-_
  • Registratie: Maart 2000
  • Laatst online: 09-09 15:42
ik ben zo snel :P

  • Orphix
  • Registratie: Februari 2000
  • Niet online
tja...
[Dit bericht is gewijzigd door _-= Erikje =-_ op 12-01-2002 20:57]
als je het nou ook nog in 1 keer goed zou doen >:) ;)

Verwijderd

Topicstarter
Op zaterdag 12 januari 2002 20:53 schreef _-= Erikje =-_ het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$mysql = mysql_query("SELECT count(*) AS aantal from userranking");
$row=mysql_fetch_array($mysql);

$totaal_aantal_stemmen= $row["aantal"]  //Het totaal aantal stemmen;

$mysql= mysql_query("SELECT COUNT(*) as aantal, team from userranking GROUP BY team");

while ($regel = mysql_fetch_array($mysql))
{
echo "Teamnaam".$regel["team"];
echo "Aantal stemmen".$regel["aantal"];
echo "Percentage".$regel["aantal"]/$totaal_aantal_stemmen;
}
?>

zoiets :)
Parse error: parse error in c:\phpdev\www\raceplanet\new\new\wereld\ranking_index.php on line 13

line 13 = $mysql= mysql_query("SELECT COUNT(*D as aantal, team from userranking GROUP BY team");

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Sinisa, bijna alle code hier wordt uit het blote hoofd ingetikt en is niet getest.
Kijk altijd dubbel goed naar de code die je zomaar copy/paste. Er mist hier een simpele ';' ...

  • _-= Erikje =-_
  • Registratie: Maart 2000
  • Laatst online: 09-09 15:42
je zou kunnen zien dat ik de ; vergeten ben de regel erboven :)

[edit]
Owke, nu mag jij eerst ;)

Verwijderd

Je escaped je ; bij
PHP:
1
2
3
<?
$totaal_aantal_stemmen= $row["aantal"]  //Het totaal aantal stemmen;
?>

Moet zijn:
PHP:
1
2
3
<?
$totaal_aantal_stemmen= $row["aantal"];  //Het totaal aantal stemmen
?>

Verwijderd

Topicstarter
jah, hij doet het, alleen sorteert hij nog niet op percentage, maar hij sorteert nu op teamnaam, is het nu ook mogelijk dat degene met het hoogste percentage bovenaan komt te staan??

vast wel, maar hoe??

beetje newbie nog;)

  • _-= Erikje =-_
  • Registratie: Maart 2000
  • Laatst online: 09-09 15:42
dat staat er al... die code is 10 sec intiep werk, ik ga echt niet eerst alles netjes testen hoor ;)

  • _-= Erikje =-_
  • Registratie: Maart 2000
  • Laatst online: 09-09 15:42
dan moet je nog een order BY invoegen

$mysql= mysql_query("SELECT COUNT(*D as aantal, team from userranking GROUP BY team ORDER BY aantal");

Verwijderd

Topicstarter
Sorry voor het ongemak, maar ik heb gewoon nog nooit met het tellen van rijen gewerkt ed, dus daarom snap ik er ook weinig van. Maar die ';'had me inderdaad wel moeten opvallen :)

Verwijderd

Topicstarter
Op zaterdag 12 januari 2002 21:08 schreef _-= Erikje =-_ het volgende:
dan moet je nog een order BY invoegen

$mysql= mysql_query("SELECT COUNT(*D as aantal, team from userranking GROUP BY team ORDER BY aantal");
Goh heb ik er toch nog wel een beetje verstand van. Erikje, je moet de DESC er nog bijzetten ;)

Dan wordt het dus zo:

$mysql= mysql_query("SELECT COUNT(*D as aantal, team from userranking GROUP BY team ORDER BY aantal DESC");

Waar een newbie al niet goed voor is he/? ;)

  • _-= Erikje =-_
  • Registratie: Maart 2000
  • Laatst online: 09-09 15:42
die is toch standaard al DESC

Verwijderd

Topicstarter
bij mij niet, hij gaf hem iig niet goed weer.

Trouwens, nog een dingetje.

Kan ik de waarden ook een nummer weergeven. Zodat je dan kan zien dat Sauber op nummer 1 staat, Ferrari op nummer 2 enzovoort.

Dan kan ik er namelijk een mooi tabelletje van maken :)

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
Op zaterdag 12 januari 2002 21:24 schreef Sinisa het volgende:
bij mij niet, hij gaf hem iig niet goed weer.

Trouwens, nog een dingetje.

Kan ik de waarden ook een nummer weergeven. Zodat je dan kan zien dat Sauber op nummer 1 staat, Ferrari op nummer 2 enzovoort.

Dan kan ik er namelijk een mooi tabelletje van maken :)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
$sql = mysql_query("SELECT count(id) from userranking");
$r = mysql_fetch_array($sql);
$totaalAantal = $r["count(id)"];

$mysql= mysql_query("SELECT COUNT(*) as aantal, team from userranking GROUP BY team ORDER BY aantal DESC");
$num = mysql_num_rows($mysql);

for ($i=1; $i<=$num; $i++)
{
 $row = mysql_fetch_array($mysql);
 $aantal = $row["aantal"];
 $team = $row["team"];
 $procent = ($aantal / $totaalAantal) * 100;

  echo "$i: $team: $procent% <br>";
}
?>

zoiets?

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Verwijderd

Topicstarter
Het werkt allemaal perfect, ik heb nu zelfs ingebouwd dat elke rij een andere kleur heeft. (even || oneven)

Maar...

Er klopt een dingetje niet nu. Aangezien de gebruikers kunnen stemmen op het favoriete team, die je uit een database haalt. De formule1 kent twaalf teams en het is dus best goed mogelijk dat er geen enkele keer wordt gestemd op Minardi bijvoorbeeld.

Ik heb dus nu de volgende tabellen.

Een tabel waar de teams in staan (rankingteam):

id
naam
land
url

Een tabel waar de stemmen in staan (userranking):

id
naam
team

Hoe kan ik het nu krijgen dat ik ook de teams waar 0 keer op is gestemd, die dus niet in tabel twee (userranking) staan, wel worden weergegeven in mijn uitkomst???

Verwijderd

Op zondag 13 januari 2002 21:05 schreef Sinisa het volgende:
Het werkt allemaal perfect, ik heb nu zelfs ingebouwd dat elke rij een andere kleur heeft. (even || oneven)

Maar...

Er klopt een dingetje niet nu. Aangezien de gebruikers kunnen stemmen op het favoriete team, die je uit een database haalt. De formule1 kent twaalf teams en het is dus best goed mogelijk dat er geen enkele keer wordt gestemd op Minardi bijvoorbeeld.

Ik heb dus nu de volgende tabellen.

Een tabel waar de teams in staan (rankingteam):

id
naam
land
url

Een tabel waar de stemmen in staan (userranking):

id
naam
team

Hoe kan ik het nu krijgen dat ik ook de teams waar 0 keer op is gestemd, die dus niet in tabel twee (userranking) staan, wel worden weergegeven in mijn uitkomst???
met een LEFT JOIN
code:
1
2
3
4
$mysql= mysql_query("SELECT COUNT(*) as aantal, team
FROM userranking LEFT JOIN rankingteam
GROUP BY team 
ORDER BY aantal DESC");

hiermee worden de gegevens van de tabel rankingteam ook ingevoegd

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?
$sql = mysql_query("SELECT count(id) from userranking");
$r = mysql_fetch_array($sql);
$totaalAantal = $r["count(id)"];

$mysql= mysql_query("SELECT COUNT(*) as aantal, team FROM userranking LEFT JOIN rankingteam GROUP BY team ORDER BY aantal DESC");



$num = mysql_num_rows($mysql);
for ($i=0; 
$i<$num; $i++){
$row = mysql_fetch_array($mysql);

$aantal = $row["aantal"]; 
$team = $row["team"];
$procent = ($aantal / $totaalAantal) * 100; 

$mysql2= mysql_query("SELECT * from rankingteam WHERE naam='$team'");
$row2 = mysql_fetch_array($mysql2);
$land = $row2["land"];
$url = $row2["url"]; 

$nr = $i+1;




if ($nr % 2 == 1) {   
    $bg = ("#ffffff");
    } 
else {   
    $bg = ("#EEEEEE");
}

echo "<tr><td align='center' bgcolor=$bg width='20'><font face='verdana, arial, helvetica' size='1'>$nr.</td>";
echo "<td align='center' bgcolor=$bg width='103'><font face='verdana, arial, helvetica' size='1'><b><a href='$url' target='new'>$team</a></b></td>";
echo "<td align='center' bgcolor=$bg width='49'>[img]'graphs/flags/$land.gif'></b></td>";
echo[/img]<font face='verdana, arial, helvetica' size='1'>$procent</td>";
}
echo"</tr></table>";
?>

Nu geeft ie aan dat hier een fout zit:

$num = mysql_num_rows($mysql);

  • dudek
  • Registratie: Maart 2000
  • Laatst online: 08-11-2022

dudek

I spy with my little eye

Op zondag 13 januari 2002 21:58 schreef Sinisa het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?
$sql = mysql_query("SELECT count(id) from userranking");
$r = mysql_fetch_array($sql);
$totaalAantal = $r["count(id)"];

$mysql= mysql_query("SELECT COUNT(*) as aantal, team FROM userranking LEFT JOIN rankingteam GROUP BY team ORDER BY aantal DESC");



$num = mysql_num_rows($mysql);
for ($i=0; 
$i<$num; $i++){
$row = mysql_fetch_array($mysql);

$aantal = $row["aantal"]; 
$team = $row["team"];
$procent = ($aantal / $totaalAantal) * 100; 

$mysql2= mysql_query("SELECT * from rankingteam WHERE naam='$team'");
$row2 = mysql_fetch_array($mysql2);
$land = $row2["land"];
$url = $row2["url"]; 

$nr = $i+1;




if ($nr % 2 == 1) {   
    $bg = ("#ffffff");
    } 
else {   
    $bg = ("#EEEEEE");
}

echo "<tr><td align='center' bgcolor=$bg width='20'><font face='verdana, arial, helvetica' size='1'>$nr.</td>";
echo "<td align='center' bgcolor=$bg width='103'><font face='verdana, arial, helvetica' size='1'><b><a href='$url' target='new'>$team</a></b></td>";
echo "<td align='center' bgcolor=$bg width='49'>[img]'graphs/flags/$land.gif'></b></td>";
echo[/img]<font face='verdana, arial, helvetica' size='1'>$procent</td>";
}
echo"</tr></table>";
?>

Nu geeft ie aan dat hier een fout zit:

$num = mysql_num_rows($mysql);
select count(*D geeft al het aantal resultaten, daarvan kun je niet vervolgens het aantal rijen tellen

ik heb het nog niet helemaal goed bekeken, maar als je count(*D vervangt door *, doet ie het dan ook nog niet

ik zal em ff wat beter bekijken maar probeer ondertussen dit maar even

Women, you can't live with 'em..... and you can't live with 'em!
Als je hoort hoe het klokje thuis tikt, zit je niet in het café.


Verwijderd

Topicstarter
dudek, daar ligt het niet aan.

Hij doet alles perfect, totdat ik ook de teamnamen wil weergeven die niet in de eerste tabel staan, en dat lukt me dus niet.

Die LEFT JOIN geeft dus een foutmelding
Pagina: 1