Ik ben nog steeds bezig met hetzelfde project en zit weer met een klein probleempje.
Ik heb een tabel users en een tabel login.
Ik zou nu willen dat wanneer ik de query uitvoer er voor elke persoon die in users staat er wordt gekeken hoevaak die persoon heeft ingelogd. Dit moet gebeuren door te tellen hoeveel records er in login staan waar users.login = login.speler.
Als ik de query uitvoer zou ik het volgende willen bekomen:
naam: Jos Verstraeten - Aantal keer ingelogd: 4 (gebaseerd op het hierboven staande tabeletje)
En dit zou moeten gebeuren voor elke speler die er in users staat
Ik zit helemaal vast de code waar ik aan dacht is de volgende:
<?php
$query = "SELECT *".
"FROM users".
" order by id asc";
$result=mysql_query($query);
$query = "SELECT *".
"FROM login".
"WHERE login.speler=users.naam order by id asc";
$result=mysql_query($query);
Misschien een tutorial doornemen SQL.
Je kan dit gewoon bijvoorbeeld in 1 select query doen.
Mooier is om het met een JOIN te doen, maar probeer het eerst eens zo:
<?php
$query = "SELECT users.id,
users.naam,
login.id,
login.speler
FROM
user, login
WHERE
login.speler = users.naam
ORDER BY users.id
ASC";
?>
Wel even je kolomnamen controleren, want ik weet niet of die kloppen..
bedankt voor je reactie, maar kan je me even helpen dit in te planten ?
Zo ziet het html gedeelte eruit:
Er zijn enkele rijen aan toegevoegd die ook gedisplayed zouden moeten worden.
Alvast bedankt!
<body>
<?php
$username="";
$password="";
$database="";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$query = "SELECT
u.id,
u.naam,
u.inlog,
COUNT(l.datum) AS aantal
FROM users AS u
LEFT JOIN login AS l
ON (u.inlog = l.speler)
GROUP BY u.inlog
ORDER BY aantal DESC";
$result=mysql_query($query);
mysql_close();
?>
<table class="tablesorter" >
<thead>
<tr>
<th class="filter-false">Id</th> <--- ID van de speler --->
<th>Naam</th> <--- Naam van de speler (users.naam) --->
<th>Aantal keer ingelogd</th> <--- # keer dat er een record staat in login met users.login = login.speler --->
<th>Status</th> <--- Actief of inactief (users.actief) --->
<th>Reden</th> <--- Reden is een opmerking als je inlogt (users.redeninactief) --->
<th>Laatste keer ingelogd</th> <--- datum van laatste record waar users.login = login.speler --->
</tr>
</thead>
<tbody>
<?php
$i=0;
while ($i < $num) {
?>
<tr >
<td><?php echo mysql_result($result,$i,"users.id"); ?></td>
<td><?php echo mysql_result($result,$i,"naam"); ?></td>
<td><?php echo $aantal ?></td>
<td><?php echo mysql_result($result,$i,"actief"); ?></td>
<td><?php echo mysql_result($result,$i,"redeninactief"); ?></td>
<td><?php echo ?></td>
</tr>
<?php
$i++;
}
?>
</tbody>
</table>
Waarom gebruik je mysql_result?
Het is makkelijker om de query uit je $result op te slaan in een array, door deze in mysql_fetch_assoc() te gebruiken. Dit kan in combinatie met een whileloop als je meerdere items wilt ophalen.
De whileloop die je nu hebt is onnodig en kan je vervangen.
In korte lijnen wordt het dus dit.
<?php
$query = "SELECT
u.id AS id,
u.naam AS naam,
u.inlog AS inlog,
COUNT(l.datum) AS aantal
FROM users AS u
LEFT JOIN login AS l
ON (u.inlog = l.speler)
GROUP BY u.inlog
ORDER BY aantal DESC";
$result=mysql_query($query);
if($result) {
while($item = mysql_fetch_assoc($result)) {
// hier kan je dan $item['aantal'], $item['id'] echo'en.
}
} else {
echo "Er is wat fout gegaan: ".mysql_error();
}
?>
Ook wil ik je vragen om hele lappen code (mits relevant) voortaan tussen [code] en [/code] tags te plaatsen. Zo blijft het beter leesbaar in het forum.
Bedankt voor je reactie -Aar-,
toch werkt het nog niet helemaal (ik ben nog niet zo goed in php - mysql) en vind de fout zelf niet.
Zie je toevallig wat ik fout doe? En alle tips om de code beter te maken zijn welkom
Parse error: syntax error, unexpected '}', expecting ',' or ';' in files/inlogg.php on line 35
<table class="tablesorter" >
<thead>
<tr>
<th class="filter-false">Id</th>
<th>Naam</th>
<th>Aantal keer ingelogd</th>
<th>Status</th>
<th>Reden</th>
</tr>
</thead>
<tbody>
<?php
$username="p";
$password="";
$database="";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$query = "SELECT
u.id AS id,
u.naam AS naam,
u.inlog AS inlog,
COUNT(l.datum) AS aantal
FROM users AS u
LEFT JOIN login AS l
ON (u.inlog = l.speler)
GROUP BY u.inlog
ORDER BY aantal DESC";
$result=mysql_query($query);
if($result) {
while($item = mysql_fetch_assoc($result)) {
echo '<tr onmouseover="this.style.backgroundColor='#FFB39F';" onmouseout="this.style.backgroundColor='#EB7050';">';
echo'<td>'. $item['naam'] .'</td>';
echo'<td>'. $item['aantal'] .'</td>';
echo'</tr>'}
} else {
echo "Er is wat fout gegaan: ".mysql_error();
}
?>
</tbody>
</table>
Werkt perfect, maar ben iets vergeten vragen.
Want ik zou ook graag zien wanneer de laatste keer is ingelogd en om een later project tot een goed einde te brengen zou ik ook graag weten hoe ik het gemiddelde bereken van de id's.