Tabel opstellen
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.
Ik neem een voorbeeld :
Tabel users:
naam: Jos Verstraeten - login: admin - ...
Tabel login
id: 1 - speler: admin - datum: ... - ...
id: 2 - speler: admin - datum: ... - ...
id: 3 - speler: admin - datum: ... - ...
id: ... - speler: admin - datum: ... - ...
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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);
$aantal=mysql_numrows($result);
?>
$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);
$aantal=mysql_numrows($result);
?>
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$query = "SELECT users.id,
users.naam,
login.id,
login.speler
FROM
user, login
WHERE
login.speler = users.naam
ORDER BY users.id
ASC";
?>
$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..
Gewijzigd op 11/04/2013 20:37:51 door Bart V B
Dat is de query maar hoe moet ik nu gaan tellen hoevaak die persoon ingelogd is?
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
SELECT
u.id,
u.naam,
COUNT(l.datum) AS aantal
FROM users AS u
LEFT JOIN login AS l
ON (u.id = l.user_id)
GROUP BY u.id
ORDER BY aantal DESC
u.id,
u.naam,
COUNT(l.datum) AS aantal
FROM users AS u
LEFT JOIN login AS l
ON (u.id = l.user_id)
GROUP BY u.id
ORDER BY aantal DESC
Kijk even goed hoe ik de tabellen afkort naar u en l.
De truc zit hem in de GROUP BY.
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!
Code (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
43
44
45
46
47
48
49
50
51
52
53
54
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
43
44
45
46
47
48
49
50
51
52
53
54
<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>
<?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>
Graag in het vervolg bij code, [code] [/code] tags gebruiken.[/modedit]
Gewijzigd op 13/04/2013 12:42:02 door Bas IJzelendoorn
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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();
}
?>
$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.
Gewijzigd op 11/04/2013 21:37:17 door - Ariën -
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
Code (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
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
<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>
<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>
Ook lijn 32 kent een single-quote die je dient te escapen door er een \ voor te zetten.
En verder moet localhost in je mysql_connect() tussen quotes.
Let wel even op het inspringen van je code, als je het overzichtelijk wilt houden. Hier en daar staat het schots en scheef.
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.
Alvast bedankt
Is al gelukt heel erg bedankt allemaal!