Neue Nachrichten Check

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

  • Neue Nachrichten Check

    Hallo,

    stehe vor folgendem Problem:

    In einem System kann ein Mitglied für verschiedene, vom Administrator angelegte, Projekte freigeschaltet sein. In der MySql Tabelle "projekte" gibt es neben id, name, etc.. auch eine Spalte "user" dort werden die User reingeschrieben, die für das Projekt freigegeben wurden. Sind also nun User Nr. 1, 4 und 10 für dieses Projekt freigegeben steht dort: 1-4-10. Mit hilfe von explode() wird später ein array draus gemacht.

    In einer weiteren Tabelle, "messages" stehen zu jedem Projekt Nachrichten, welche von den Mitgliedern geschrieben werden\wurden. In dieser Tabelle gibt es die Spalte "projektid". Dort wird festgelegt zu welchem Projekt die Nachricht gehört.

    In der letzten Tabelle, "gelesen" stehen 3 Spalten, "id", "user", "messageid"... Sobald ein Benutzer eine Nachricht liest, wird es hier eingetragen um die Nachricht als gelesen zu makieren.

    Nun möchte ich prüfen ob es noch Nachrichten gibt, die vom User noch nicht gelesen wurden. Dabei muss ich auch beachten das der User nur für bestimmte Projekte freigeschaltet ist. Und das diese "Prüfung" alle 20-30 Sekunden vollzogen werden soll, da es in einem I-Frame passiert, welcher sich ständig aktualisiert.

    Momentan bin ich soweit das ich alle Projekte, für die ein User Freigeschaltet wurde in ein Array geschrieben habe.
    Nur wie könnte ich nun am geschicktesten Prüfen ob noch Nachrichten da sind die vom user nich gelesen wurden, ohne die Datenbank sehr zu belasten.

    Ich würde es so machen:
    Mit foreach für jede Projekt ID die nun in dem Array steht eine Abfrage machen und alle Nachrichten ID´s in einem Array speichern. Dann wieder mit foreach die "gelesen" Tabelle durchforsten ob schon ein Eintrag zur jeweiligen nachricht vorliegt oder nicht. Sobald ein Ergebnis leer ist würde es bedeuten das noch nicht alle Nachrichten gelesen wurden....

    Aber ich glaube das wird später die DB sehr belasten...

    Habt ihr dazu eine Idee?

    Danke im Vorraus..
    The Human Mirror - Mein Blog!
    www.sonicsense.de - The future of music!

  • #2
    Hab es nun einmal so gelöst...

    PHP-Code:
            $sql_lights "SELECT * FROM bci_projekte ORDER BY name ASC;";
            
    $fill_lights = new Query($sql_lights);
            
    $freepro = array();
            while (
    $row_lights $fill_lights->fetch()) {
            
    $got_worker $row_lights["worker"];
            
    $got_id $row_lights["id"];
            
    $worker explode("-",$got_worker);
            if(
    in_array("$authid",$worker))
                {
             
    array_push($freepro$got_id );
             }
             }
            
    $msgids= array();
             foreach(
    $freepro as $regpro)
             {

        
    $sql_getentrys "SELECT
        bci_msg.id
    FROM
        bci_msg 
        LEFT JOIN bci_read USING(id)
    WHERE
        bci_read.msgid IS NULL AND bci_msg.pid='
    $regpro';";
        
    $result_getentrys mysql_query($sql_getentrys) or die(mysql_error());
        while (
    $row mysql_fetch_assoc($result_getentrys)) {
                
    $did $row["id"];
                
    array_push($msgids$did );
                }
            } 
    The Human Mirror - Mein Blog!
    www.sonicsense.de - The future of music!

    Kommentar

    Lädt...
    X