Om voor de index van een forum het totaal aantal posts gebruik ik de volgende query:
Hij geeft alles netjes weer maar het probleem is dat als in de tabel topics geen enkele rij is die het forum_is * bevat, wordt forum * niet weergegeven op de index. Anders gezegd, een forum met 0 topics / posts blijft verborgen.
Daarom had ik 2 querys bedacht. [volgende code is wat vereenvoudigd]
Het probleem hier van is dat alles veel te vaak weergegeven wordt, dus als er 5 forums zijn wordt alles 5 keer weergegeven.
Hoe is het nou mogelijk om het resultaat van die 2 querys in 1 keer weer te geven?
(een database structuur staat hier )
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <? $query = mysql_query(" SELECT count(DISTINCT p.post_id) as total_posts, count( DISTINCT t.topic_id) as total_topics, c.*, f.* FROM forums f INNER JOIN posts on t.topic_id = p.topic_id INNER JOIN topics on t.forum_id = f.forum_id, cat c, posts p, topics t where f.cat_id = c.id GROUP BY c.id, f.forum_id ") or die(mysql_error()); ?> |
Hij geeft alles netjes weer maar het probleem is dat als in de tabel topics geen enkele rij is die het forum_is * bevat, wordt forum * niet weergegeven op de index. Anders gezegd, een forum met 0 topics / posts blijft verborgen.
Daarom had ik 2 querys bedacht. [volgende code is wat vereenvoudigd]
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
| <? include('config.php'); mysql_connect($host, $user, $pass); mysql_select_db($db); $query = mysql_query(" SELECT count(DISTINCT t.title) as topics, count(DISTINCT p.post_id) as posts FROM forums f, topics t, posts p WHERE p.topic_id = t.topic_id AND t.forum_id = f.forum_id GROUP BY f.forum_id ") or die(mysql_error()); while ($r = mysql_fetch_array($query)) { $i++; $forum[$i] = $r; } $query2 = mysql_query("SELECT * from forums") or die(mysql_error()); while ($row = mysql_fetch_array($query2)) { $x++; $cat[$x] = $row; } for($j=0; $i >= $j; $j++) { for($z=0; $x >= $z; $z++) { echo $cat[$z]['naam']; echo"<br>"; echo "Topics:<br>"; echo $forum[$j]['topics']; echo "Posts:<br>"; echo $forum[$j]['posts']; } } ?> |
Het probleem hier van is dat alles veel te vaak weergegeven wordt, dus als er 5 forums zijn wordt alles 5 keer weergegeven.
Hoe is het nou mogelijk om het resultaat van die 2 querys in 1 keer weer te geven?
(een database structuur staat hier )