INSERT optimieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • INSERT optimieren

    Hi,

    ich schreibe zur Zeit an einen Forum und bin momentan damit beschäftigt den Benutzer über neue Post in Kenntnis zu setzen.

    Konkret heißt dies, sobald ein neues Thema eröffnet wird oder jemand eine Antwort schreibt, soll dies bei allen anderen registrierten Benutzern im Forum durch eine Grafik kenntlich gemacht werden.

    Mein Problem ist eigentlich nicht die Umsetzung, sondern die Optimierung.

    Sobald ein neues Thema oder eine Antwort geschrieben wird, gehe ich durch alle Benutzer und schreibe für jeden Benutzer in eine Tabelle "forum_newposts" die thread_id des Themas und die user_id des Benutzers.

    Allerdings mache ich mir nun Gedanken über die Geschwindigkeit, wenn mal mehrere hundert oder tausend Benutzer registriert sind.

    Gibt es vielleicht eine bessere Möglichkeit?

    PHP-Code:
    $sql_user_list sql_query_result("SELECT id FROM forum_users");
    while(
    $user_row mysql_fetch_assoc ($sql_user_list))
    {
        
    $user_id $user_row['id'];
                    
        
    sql_update("INSERT INTO forum_newposts SET thread_id='$thread_id', user_id='$user_id'"


  • #2
    mach es doch wie die meisten anderen foren auch;

    frage einfach nur die einträge ab, die ab einen bestimmten zeitpunkt geschrieben wurden (z.b. nach dem letzten besuch des surfers) und mach nur diese kenntlich.

    Kommentar


    • #3
      es geht auch so:
      PHP-Code:
      INSERT INTO tabelle 
          
      (feld1feld2)
      VALUES
          
      ('val1a''val2a'),
          (
      'val2a''val2b'),
          ...
          (
      'val1z''val1z'
      ganz bequem per array & implode, ohne die db in einer while-schleife zu quälen.
      Kissolino.com

      Kommentar


      • #4
        Es gibt noch einen anderen Weg:

        Man nennt die Tabelle forum_newposts in forum_seen um und speichert in dieser nur noch die threads, die der User bereits gesehen hat.

        Sobald nun ein neuer Post / Thread erzeugt wird, brauche ich lediglich ein:

        PHP-Code:
         sql_update(    "DELETE FROM forum_seen WHERE thread_id='$thread_id'"); 

        Eine Frage in diesen Zusammenhang habe ich noch. Wenn ich einen Eintrag in die forum_seen machen will, überprüfe ich vorher, ob noch kein Eintrag vorhanden ist, damit ich keine doppelten Einträge bekomme.
        Zur Zeit erledegie ich das noch mit zwei Queries, allerdings frage ich mich nun, ob MySQL da nicht bereits eine Lösung für anbietet?

        Beispiel:
        PHP-Code:
        $forum_seen_num sql_query_num("SELECT id FROM forum_seen
         WHERE thread_id='
        $thread_id' AND
         user_id='
        $g_user[id]' LIMIT 1");

        if(
        $forum_seen_num == 0)
        sql_update("INSERT forum_seen SET thread_id='$thread_id', user_id='$g_user[id]'"); 
        EDIT:
        umgebrochen by mrhappiness
        Zuletzt geändert von mrhappiness; 07.09.2004, 23:38.

        Kommentar


        • #5
          hm ... unique auf beide id's ... und den fehler abfangen
          Kissolino.com

          Kommentar


          • #6
            Hm, ist auch eine Lösung, finde ich aber nicht so schön.


            Eine Frage hätte ich noch :-)

            Neben der forum_seen Tabelle habe ich noch eine forum_ignore tabelle.

            forum_seen:
            [id][thread_id][user_id]

            forum_ignore:
            [id][thread_id][user_id]

            Ich möchte nun per Query überprüfen, ob die $thread_id in forum_seen vorhanden ist, diese aber gleichzeitig in forum_ignore nicht vorkommt.

            Also in etwa so (funktioniert aber nicht):
            PHP-Code:
            SELECT t1.id 
            FROM forum_seen t1
            INNER JOIN forum_ignore
            ON 
            (t1.thread_id='$thread_id' AND t1.user_id='$g_user[id]') AND 
            (
            t2.thread_id!='$thread_id' AND t2.user_id!='$g_user[id]'

            Kommentar


            • #7
              Original geschrieben von Marco Gutenhof
              Ich möchte nun per Query überprüfen, ob die $thread_id in forum_seen vorhanden ist, diese aber gleichzeitig in forum_ignore nicht vorkommt.
              such mal in http://www.php-resource.de/forum/sho...threadid=28292 nach "alle zahlen auslesen, zu denen das quadrat nicht vorhanden ist", das sollte helfen
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Original geschrieben von Marco Gutenhof
                Hm, ist auch eine Lösung, finde ich aber nicht so schön.
                schön? schön ist eine lösung wie jochenj sie zb beschrieben hat ... REPLACE könnte auch gehen ... zu deinem INNER JOIN: erwartet der nicht einen eintrag auf BEIDEN seiten? wieso sollte das also gehen? siehe ... happys post
                Kissolino.com

                Kommentar

                Lädt...
                X