topic omhoog bij een reactie.
ik ben bezig met een forum en dit is bijna af.
echter wil ik nog dat als iemand reageert in een topic dat dit topic omhoog gaat.
iemand die mij kan helpen?
ik heb hier onder de code indien nodig.
mvg ,
Olivier
Quote:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
include '../global.php';
$layout->top();
echo menu();
echo '<div class="center">';
if(isset($_SESSION['id']) && is_numeric($_SESSION['id']) && $_SESSION['ip'])
{
if(isset($_GET['id']))
{
$online->normaal();
$topic_data = mysql::query("SELECT * FROM forum_topic WHERE catagorie='".mysql::safe_get($_GET['id'])."' ORDER BY id DESC");
$catagorie_data = mysql::query("SELECT * FROM forum_catagorie WHERE id='".mysql::safe_get($_GET['id'])."'");
if(mysql_num_rows($catagorie_data) >'0')
{
$cata = mysql_fetch_object($catagorie_data);
echo '<div id="sub"><a href="index.php">Forum</a> >> <a href="forum.php?id='.$cata->id.'"><b>'.$cata->titel.'</b></a></div>';
echo '<div id="forum_info">';
echo '<div style="padding:2px;width:560px;text-align:left;float:left;">';
echo 'forum';
echo '</div>';
echo '<div style="width:220px;text-align:left;float:left;">';
echo 'aantal reacties';
echo '</div>';
echo '<div style="width:180px;text-align:left;float:left;">';
echo 'laatste reactie';
echo '</div>';
echo '</div>';
$i = 1;
while($topic = mysql_fetch_object($topic_data))
{
$topic_count = mysql::query("SELECT * FROM forum_reacties WHERE topic='".$topic->id."' ORDER BY id DESC");
$count_topics = mysql_num_rows($topic_count);
$laatste_reactie = mysql_fetch_object($topic_count);
if(!empty($laatste_reactie->bericht))
{
$laatstereactie = $forum->text_chop($laatste_reactie->bericht,10);
$door = 'door <a href="/profile.php?naam='.htmlentities($laatste_reactie->naam).'">'.htmlentities($forum->text_chop($laatste_reactie->naam,10));
} else {
$laatstereactie = 'door';
$door = 'niemand';
}
if($forum->gelezen($topic->id) == TRUE)
{
$gelezen = '<img src="/forum/images/open.png" class="gelezen">';
} else {
$gelezen = '<img src="/forum/images/dicht.png" class="gelezen">';
}
if($i % 2 == 0)
{
echo '<div id="sub_1">'.$gelezen.'<a class="url" href="topic.php?id='.htmlentities($topic->id).'">'.htmlentities($topic->titel).'</a></div>
<div id="info_sub">'.$count_topics.'</div><div id="info_sub">'.htmlentities($laatstereactie).' '.$door.'</a></div>';
}
else
{
echo '<div id="sub_2">'.$gelezen.'<a class="url" href="topic.php?id='.htmlentities($topic->id).'">'.htmlentities($topic->titel).'</a></div>
<div id="info_sub2">'.$count_topics.'</div><div id="info_sub2">'.htmlentities($laatstereactie).' '.$door.'</a></div>';
}
$i++;
}
echo '<div id="footer_forum"></div></div>';
}
else {
echo 'deze catagorie bestaat niet.';
}
}
else
{
echo 'Er is geen waarde opgehaald.';
}
}
echo '</div>';
$layout->bottom();
?>
include '../global.php';
$layout->top();
echo menu();
echo '<div class="center">';
if(isset($_SESSION['id']) && is_numeric($_SESSION['id']) && $_SESSION['ip'])
{
if(isset($_GET['id']))
{
$online->normaal();
$topic_data = mysql::query("SELECT * FROM forum_topic WHERE catagorie='".mysql::safe_get($_GET['id'])."' ORDER BY id DESC");
$catagorie_data = mysql::query("SELECT * FROM forum_catagorie WHERE id='".mysql::safe_get($_GET['id'])."'");
if(mysql_num_rows($catagorie_data) >'0')
{
$cata = mysql_fetch_object($catagorie_data);
echo '<div id="sub"><a href="index.php">Forum</a> >> <a href="forum.php?id='.$cata->id.'"><b>'.$cata->titel.'</b></a></div>';
echo '<div id="forum_info">';
echo '<div style="padding:2px;width:560px;text-align:left;float:left;">';
echo 'forum';
echo '</div>';
echo '<div style="width:220px;text-align:left;float:left;">';
echo 'aantal reacties';
echo '</div>';
echo '<div style="width:180px;text-align:left;float:left;">';
echo 'laatste reactie';
echo '</div>';
echo '</div>';
$i = 1;
while($topic = mysql_fetch_object($topic_data))
{
$topic_count = mysql::query("SELECT * FROM forum_reacties WHERE topic='".$topic->id."' ORDER BY id DESC");
$count_topics = mysql_num_rows($topic_count);
$laatste_reactie = mysql_fetch_object($topic_count);
if(!empty($laatste_reactie->bericht))
{
$laatstereactie = $forum->text_chop($laatste_reactie->bericht,10);
$door = 'door <a href="/profile.php?naam='.htmlentities($laatste_reactie->naam).'">'.htmlentities($forum->text_chop($laatste_reactie->naam,10));
} else {
$laatstereactie = 'door';
$door = 'niemand';
}
if($forum->gelezen($topic->id) == TRUE)
{
$gelezen = '<img src="/forum/images/open.png" class="gelezen">';
} else {
$gelezen = '<img src="/forum/images/dicht.png" class="gelezen">';
}
if($i % 2 == 0)
{
echo '<div id="sub_1">'.$gelezen.'<a class="url" href="topic.php?id='.htmlentities($topic->id).'">'.htmlentities($topic->titel).'</a></div>
<div id="info_sub">'.$count_topics.'</div><div id="info_sub">'.htmlentities($laatstereactie).' '.$door.'</a></div>';
}
else
{
echo '<div id="sub_2">'.$gelezen.'<a class="url" href="topic.php?id='.htmlentities($topic->id).'">'.htmlentities($topic->titel).'</a></div>
<div id="info_sub2">'.$count_topics.'</div><div id="info_sub2">'.htmlentities($laatstereactie).' '.$door.'</a></div>';
}
$i++;
}
echo '<div id="footer_forum"></div></div>';
}
else {
echo 'deze catagorie bestaat niet.';
}
}
else
{
echo 'Er is geen waarde opgehaald.';
}
}
echo '</div>';
$layout->bottom();
?>
Je zou wanneer er iemand reageert een update_datetime in de tabel aanmaken en die dan laten sorteren op de update_datetime,insert_datetime of iets dergelijks.
en dan als een topic word aangemaakt de last_reactie op de aanmaak tijd zetten?
Ja, dat zou je kunnen doen. Eventueel een default (op last_reaction) in de tabel zetten. Dan moet je bij de insert dat niet meer doen. En op create_date kun je ook een default zetten.
Je kan namelijk aan het bericht zelf ook zien van wanneer de laatste reactie was.
Wellicht is het voor de snelheid (en gemak) wel makkelijk als je een last_reaction (of laatste_reactie) toevoegt, maar het zijn wel dubbele gegevens. Dus kan je in de war komen met inconsistente gegevens én je database raakt sneller vol.
Als je alles goed normaliseert (opbouwt) en je een nette query schrijft moet het ook zonder die kolom kunnen.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT DISTINCT p.topic_id, p.author_id, p.post_time, t.topic_name
FROM posts AS p
LEFT JOIN topics AS t
ON p.topic_id = t.topic_id
ORDER BY p.post_time DESC
GROUP BY p.topic_id
FROM posts AS p
LEFT JOIN topics AS t
ON p.topic_id = t.topic_id
ORDER BY p.post_time DESC
GROUP BY p.topic_id
(voorbeeld, niet getest)
Gewijzigd op 22/02/2012 19:59:31 door Eddy E
Zo had ik het nog niet gezien Eddy, maar het is wel een mooiere oplossing dan de mijne. Bedankt voor de tip :-).