Goedendag,
Aan de titel te zien lijkt het misschien makkelijk maar dat is het niet echt..
Ik probeer een tabel op mijn webpagina te plaatsen met het aantal punten van een groep spelers, een clan.
Ik heb totnutoe deze code en deze laat mooi alle gegevens zien uit de tabel met het aantal punten per clan, maar nu wil ik graag dat de clan met de meeste punten bovenaan komt te staan.
Waarom heb je de tabel 'clanleden' nodig? Je hebt clans en users. Een veld clan_id in de tabel users zou toch voldoende zijn?
Ja dat zou in principe ook kunnen, maar ik dacht dat dit opsplitsten ook een deel was om je tabel te 'optimaliseren' anders staan de velden clan_id en clan_type in de usertabel terwijl deze niet gebruikt wordt als de user niet in een clan zit.
Maar is dit een probleem om op te lossen met INNER JOIN?
SELECT
c.clan_naam,
SUM(u.totaal_aanval + u.totaal_verdediging) AS totaal_punten
FROM
clan AS c
INNER JOIN
clanleden AS cl
ON cl.clan_id = c.clan_id
INNER JOIN
users AS u
ON u.user_id = cl.user_id
GROUP BY
c.clan_naam
ORDER BY
totaal_punten DESC
Zoiets?
ps. De koppeltabel vind ik nog niet eens zo'n gek idee. Ik kan me prima voorstellen dat een bepaalde user in meerder clans kan zitten?
Die koppeltabel 'clanleden' heb je alleen nodig als een gebruiker bij meerdere clans kan horen. Als dat niet het geval is, kun je het id van de clan waartoe een gebruiker behoort gewoon in de users tabel opslaan, samen met eventueel het type.
Behoort een gebruiker tot geen enkele clan, dan zijn die velden gewoon leeg...
In jouw situatie heb je in ieder geval een 1-op-meer relatie, namlijk die tussen een clan en zijn leden. Vandaar ook dat je een aparte tabel voor de clans gebruikt en enkel het id aan een gebruiker koppelt.
Zodra daarnaast gebruikers ook nog eens lid kunnen zijn van meerdere clans, heb je een meer-op-meer relatie. In zo'n situatie heb je altijd een koppeltabel (clanleden in jouw geval) nodig...
Maar nu is het alleen nog dat ik die (voor mij) erg moeilijke mysql query niet snap.
En daardoor kan ik nu niet de fout oplossen die er nu op mijn beeldscherm komt :(
<?php
echo "<table border='1'>";
$sql = "SELECT
c.clan_naam,
SUM(u.totaal_aanval + u.totaal_verdediging) AS totaal_punten
FROM
clan AS c
INNER JOIN
clanleden AS cl
ON cl.clan_id = c.clan_id
INNER JOIN
users AS u
ON u.user_id = cl.user_id
GROUP BY
c.clan_naam
ORDER BY
totaal_punten DESC";
$res = mysql_query($sql);
while($row = mysql_fetch_object($res) )
{
echo "<tr><td>" . $row->c.clan_naam . "</td><td>" . $row->totaal_punten . "</td></tr>";
}
echo "</table>";
?>
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\wamp\www\Klikker\clan_ranklijst.php on line 61
regel 61 is de regel met de while($row =mysql_fetch_object($res) )
Je query is waarschijnlijk mislukt, alleen controleer jij dat nergens. Doe dat dus eerst eens en geef een foutmelding met mysql_error() als de query inderdaad mislukt is. Aan die foutmelding heb je namelijk veel meer.