Toon posts:

[SQL] Sorteren forum op laatste reactie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Het probleem is als volgt:

ik heb al een tijdje een forum draaien op mijn website.
Nu heb ik iets aan de layout veranderd, zodat het er als volgt komt uit te zien.

Tot dat punt geen probleem. Maar nu wil ik graag dat er gesorteerd wordt op de laatste reactie, net als op Tweakers.

De tabellen in de database zijn als volgt:

tabel beschikbaar
|| forumid || naam || stelling || titel || datumtijd || ipadres ||

tabel reacties
|| idreactie || forumid || naam || reactie || datumtijd || ipadres ||

De code waarmee de pagina wordt opgebouwd is (regels met alleen maar html zijn weggelaten...):

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
<?php
include("config_forum.php");  // Bevat wachtwoord etc.
$db = @mysql_pconnect($host, $user, $pass)
         or die ("verbinding maken met de MySQL-server is mislukt!");
      @mysql_select_db($database, $db)
         or die ("verbinding maken met de database is mislukt!");
$sql_select = "SELECT id,naam,stelling,titel,datumtijd FROM beschikbaar ORDER BY id DESC";
$result = mysql_query($sql_select,$db);
if($result){ 
    $i=0;

    while ($row = mysql_fetch_array($result)){
      
        if ($i%2 == 0) {?>  // Om en om heeft elke regel een ander kleurtje
              <tr valign="middle"> 
                <td class="ForumTekst1"><a href="reageer.php?idforum=<?php printf($row['id'])?>" class="BerichtTekst"><?php printf($row['titel'])?></a></td>
                <td width="150" class="ForumTekst1"><?php printf($row['naam'])?></td>
                <td width="60" class="ForumTekst1"><div align="center"> 
                    <? $temp=$row['id'];
            $sql_count = "SELECT COUNT(*) as aantal FROM reacties WHERE id=$temp";
            $resultcount = mysql_query($sql_count,$db);
            $rowcount = mysql_fetch_object($resultcount);
            echo $rowcount->aantal; ?>
                  </div></td>
                <td width="300" class="ForumTekst1"> 
                  <?                      
            $sql_laatstereactie = "SELECT naam as reactienaam,datumtijd as reactiedatum FROM reacties WHERE id=$temp ORDER BY idreactie DESC LIMIT 0, 1";
            $resultreactie = mysql_query($sql_laatstereactie,$db);
            $laatstereactie = mysql_fetch_object($resultreactie);
            if ( $laatstereactie == "" ) { ?>
                  -&nbsp; 
                  <?
            } else { echo $laatstereactie->reactiedatum; ?>
                  door <? echo $laatstereactie->reactienaam; } ?> </td>
              </tr>
              <?
        } else {?>
              <tr valign="middle"> 
                <td class="ForumTekst2"><a href="reageer.php?idforum=<?php printf($row['id'])?>" class="BerichtTekst"><?php printf($row['titel'])?></a></td>
                <td width="150" class="ForumTekst2"><?php printf($row['naam'])?></td>
                <td width="60" class="ForumTekst2"><div align="center"> 
                    <? $temp=$row['id'];
            $sql_count = "SELECT COUNT(*) as aantal FROM reacties WHERE id=$temp";
            $resultcount = mysql_query($sql_count,$db);
            $rowcount = mysql_fetch_object($resultcount);
            echo $rowcount->aantal; ?>
                  </div></td>
                <td width="300" class="ForumTekst2"> 
                  <?                      
            $sql_laatstereactie = "SELECT naam as reactienaam,datumtijd as reactiedatum FROM reacties WHERE id=$temp ORDER BY idreactie DESC LIMIT 0, 1";
            $resultreactie = mysql_query($sql_laatstereactie,$db);
            $laatstereactie = mysql_fetch_object($resultreactie);
            if ( $laatstereactie == "" ) { ?>
                  -&nbsp; 
                  <?
            } else { echo $laatstereactie->reactiedatum; ?>
                  door <? echo $laatstereactie->reactienaam; } ?> </td>
              </tr>
              <?        
        }
        $i++;
     } ?>
            <?
} else { echo "Error";
}
?>


Dus: hoe laat ik deze forum op volgorde van de laatste reactie sorteren? Er zal waarschijnlijk (denk ik) voor de eerste query al een query moeten komen die sorteert op idreactie of zo.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je code is niet boeiend, alleen de query neerzetten was ook wel voldoende geweest :)

maar je kunt toch wel gewoon sorteren op het tijststip van de reactie :?

En wat staat er eigenlijk in de tabel 'beschikbaar'?

[ Voor 15% gewijzigd door .oisyn op 04-09-2003 20:27 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
In beschikbaar staat de naam van de topicstarter, de titel van het forum, een korte uitleg (stelling) en verder datum/tijd en ipadres.

In reacties staan vervolgens alle reacties die zijn gepost op bestaande forums.

  • slm
  • Registratie: Januari 2003
  • Laatst online: 25-06 12:45

slm

.oisyn schreef op 04 September 2003 @ 20:26:
maar je kunt toch wel gewoon sorteren op het tijststip van de reactie :?
Precies. Wat is het probleem nou? Of heb je de code niet zelf geschreven en weet je überhaupt niet hoe je de query moet wijzigen?

To study and not think is a waste. To think and not study is dangerous.


Verwijderd

Topicstarter
Ik heb de code wel degelijk zelf geschreven. Maar ik doorzie gewoon even niet welke query's ik moet uitvoeren.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Ipv nu op reactieId te sorteren, sorteer je gewoon op reactie-datum.

* whoami ziet het probleem niet.

https://fgheysels.github.io/


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-08 18:29
whoami schreef op 04 September 2003 @ 20:36:
Ipv nu op reactieId te sorteren, sorteer je gewoon op reactie-datum.

* whoami ziet het probleem niet.
Dan krijg je toch alle reacties, dan moet je in PHP weer per aparte topic de gegevens er uit gaan vissen? Anders heb je geen sortering op de *laatste* reactie. Volgens mij is dit weer een typisch geval voor de 5e en 6e normaalvorm :*)

Maak in je tabel met beschikbaar een veldje met last_post_date die je bij iedere reactie update met NOW().

Verwijderd

Topicstarter
Dat laatste werkt!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-08 18:29
Natuurlijk ;)
Misschien kun je ook nog bijhouden wie de laatste post geplaatst heeft door gewoon nog een kolom last_userid te maken. Dan kun je dat ook laten zien.

Verwijderd

Topicstarter
maar dat laat je toch al zien! (zie regel 33 en 34 van de code)
Pagina: 1