Thread posting forum unread einfügen wie am besten? (6 answers)
Opened by Gustl at 2011-09-12 18:55

Gustl
 2011-09-12 18:55
#152314 #152314
User since
2011-01-27
441 Artikel
BenutzerIn
[Homepage]
user image
Hallo,

ich habe ein Forum mit Perl/MySQL programmiert. (Im Browsergame Pingu-Farmer)
Ich wollte, so wie es in Foren so ist, dass für die Spieler die neuen nichtgelesenen Beiträge oder Themen fett markiert sind.

Ich habe eine table accounts, wo alle angemeldeten Spieler mit den ids drin sind. Dann habe ich eine table wo die spielerid und die threadid reingeschrieben werden, von den threads die neu sind und noch nicht von dem spieler(id) gelesen wurden.

bei einer Antwort oder einem neuen Thema (thread) habe ich folgendem Code:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sub set_unread{
  my $threadID = shift;
  
  my $sth = $dbh->prepare(q{SELECT account_id FROM forum_accounts});
  $sth->execute();
  my @erg;
  while (my $zeile = $sth->fetchrow_hashref()){
    push(@erg,$zeile);
  }  
  $sth->finish;
  
  foreach(@erg){                                                               
    unless( $_->{account_id} ==  $main::acc_ID){
      $sth = $dbh->prepare(q{ CALL insert_forum_unread(?,?)});
      $sth->execute($_->{account_id}, $threadID);
      $sth->finish;    
    }  
  }    
}

Stored Procedure insert_forum_unread schaut so aus:
Code: (dl )
1
2
3
4
5
6
7
CREATE PROCEDURE insert_forum_unread( acc_id INT(10), t_id INT(10) )
BEGIN
IF NOT EXISTS(SELECT * FROM forum_threads_unread WHERE account_id=acc_id AND
thread_id=t_id) THEN
INSERT INTO forum_threads_unread (account_id, thread_id) VALUES (acc_id,t_id);
END IF;
END;



Anfangs als es noch wenig angemeldete Spieler gab war das kein Problem, aber jetzt, bei ca. 400 angemeldete Spieler, habe ich ein Zeitproblem.
Bei jedem Antworten oder Erstellung von einem neuen Thema benötigt die sub set_unread jetzt über 20Sekunden... Das ist keinem zumutbar.

Habt ihr vielleicht eine Idee wie ich das besser lösen könnte? Oder wie es, zb. hier im Forum gemacht wurde? Welches, ja bestimmt auch selbst programmiert wurde.

Gruß

Edit: Warum ist die codebox eigentlich auf 40em Breite begrenzt?
Code: (dl )
1
2
3
div.codebox {
max-width: 40em;
}

Wenn sie etwas größer wäre, würde das ganze übersichtlicher sein.
Last edited: 2011-09-12 18:58:47 +0200 (CEST)

View full thread posting forum unread einfügen wie am besten?