De inhoud van drie tabbelen in één
Ik wil graag een top 3 tonen op mijn site van de gebruikers die het meest hebben gewonnen.
Nou heb ik in mijn tabel drie velden die heten winnaar1, winnaar2 en winnaar3.
Ik wil graag tonen welke drie gebruikers hier het meest in voorkomen en hoevaak. Dit heb ik al gerealiseerd voor één veld alleen hoe doe ik dit met drie?
Dit is wat ik tot nu toe heb met één veld en dat werkt:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sql3 = "SELECT DISTINCT winnaar1 FROM wedstrijden Limit 3";
$query3 = mysql_query($sql3) or die (mysql_error()."<br>in file ".__FILE__." on line ".__LINE__);
while($winnaar = mysql_fetch_object($query3)) {
$winnaar = "".$winnaar->winnaar1."";
$result1 = mysql_query("SELECT winnaar1 FROM wedstrijden WHERE winnaar1 = '$winnaar'");
$aantalwin = mysql_num_rows($result1);
echo "$winnaar: "; echo "".$aantalwin.""; ?>
$sql3 = "SELECT DISTINCT winnaar1 FROM wedstrijden Limit 3";
$query3 = mysql_query($sql3) or die (mysql_error()."<br>in file ".__FILE__." on line ".__LINE__);
while($winnaar = mysql_fetch_object($query3)) {
$winnaar = "".$winnaar->winnaar1."";
$result1 = mysql_query("SELECT winnaar1 FROM wedstrijden WHERE winnaar1 = '$winnaar'");
$aantalwin = mysql_num_rows($result1);
echo "$winnaar: "; echo "".$aantalwin.""; ?>
Gewijzigd op 30/03/2011 14:07:56 door Danny von Gaal
Het aantal items die je hebt (winnaar 1, winnaar 2 etc..) moet je nooit laten afhangen van het aantal velden.
- Aar - op 30/03/2011 14:14:00:
Hoeft niet een verkeerd datamodel te zijn. Je kan bijvoorbeeld een jaar-week tabel hebben met de attributen jaar/week/winnaar1/winnaar2/winnaar3. In de 3e normaalvorm is dat toegestaan en staat garant voor performance. Ga je naar de 4e normaalvorm dan heeft Aar gelijk. In dat geval wordt je tabel:Dit klinkt niet als een goed genormaliseerde database.
Het aantal items die je hebt (winnaar 1, winnaar 2 etc..) moet je nooit laten afhangen van het aantal velden.
Het aantal items die je hebt (winnaar 1, winnaar 2 etc..) moet je nooit laten afhangen van het aantal velden.
jaar/week/winnaar/rank en komt jaar en week altijd driemaal voor en heb je rank=1 of 2 of 3
Gewijzigd op 30/03/2011 14:35:50 door John D
Dat kan ik toch nooit los van elkaar uitlezen?
Om te tellen gebruik je COUNT()
Om de meestvoorkomende(n) te vinden gebruik je ORDER BY
Om je output te limiteren tot 3 gebruik je LIMIT
in jouw tabel wordt dat iets in de orde van:
select winnaar1, count(*)
from wedstrijden group by winnaar1 order by count(*) asc limit 1
union
select winnaar2, count(*)
from wedstrijden group by winnaar2 order by count(*) asc limit 1
union
select winnaar3, count(*)
from wedstrijden group by winnaar3 order by count(*) asc limit 1
Gewijzigd op 30/03/2011 15:09:33 door John D
Dat begrijp ik nog wel, maar het is de bedoeling dat ik een overzicht krijg van de top3 van alle drie de velden.
Het kan dus zijn dat piet voorkomt in veld winnaar 1 en winnaar 2 dan moeten die twee wel bij elkaar worden opgeteld. Dat is juist het probleem.
De tabel ziet er bijvoorbeeld zo uit:
winnaar1 winnaar2 winnaar3
piet ---- henk ---- henk
henk ---- piet ---- jan
leo ----- piet ---- linda
jan ----- chris --- piet
Dan moet de top3 worden:
1. piet
2. henk
3. jan
Gewijzigd op 30/03/2011 16:49:48 door Danny von Gaal