2011-01-12 23 views
0

Ich arbeite gerade an meinem privaten Messaging-System für meine Website und bis jetzt macht einiges von dem, was ich tun muss, Sinn.Wie verknüpfe ich die automatisch inkrementierte ID von einer Tabelle mit der ID in einer anderen Tabelle?

Ich habe dachte ich, die Kraft von MySQL verwenden müssen beitreten, aber ein paar Fragen .. In meinem Modell ich begonnen habe Codierung für meine Nachricht Posteingang und haben die folgende Abfrage:

„SELECT * FROM Nachrichten WHERE from_id = '$ id' ";

$ ID ist im Grunde die automatisch inkrementierte ID aus meiner Benutzer-Tabelle und from_id ist das Gleiche, aber in meiner Nachrichtentabelle.

Was ich wissen möchte, ist, wie die Nachrichtentabelle die from_id erhalten soll? Ich weiß, dass die from_id aus der Nachrichtentabelle und die automatisch inkrementierte ID aus der users-Tabelle sind, was ich verwenden werde, um beide Tabellen zu verbinden. Aber ich bin ein bisschen fest, wie man das macht.

Ich würde lieber IDs verwenden, um den Absender und Empfänger einer Nachricht als ihren Benutzernamen zu identifizieren, aber ich bin ziemlich verwirrt, wie man dies einrichten soll. Ich bin mir ziemlich sicher, dass ich es schaffen kann, sobald ich es verstanden habe.

+0

Anstatt doppelte Fragen zu veröffentlichen, warum nicht einfach die erste bearbeiten, um bessere Ergebnisse zu erhalten? http://stackoverflow.com/questions/4669675/looking-for-tutorial-on-how-to-build-a-private-messaging-system-using-php –

Antwort

1

je nachdem, was Auth Bibliothek, die Sie verwenden, müssen Sie so etwas wie dies in CI:

view_messages() 
{ 
    //this check could be done in the constructor 
    if($this->auth->logged_in()==TRUE) 
    { 
     $userID=$this->auth->user_data('userID'); 
    } 
    else 
    { 
     redirect('not_logged_in'); 
    } 

    $this->load->model('message'); 
    $messages = $this->message->get_messages($userID); 
    // do what you want with messages. 
    //print_r($messages); 
} 

Ihre Nachrichten Modell:

function get_messages($userID=null) 
{ 
    $this->db->where('userID', $userID); 
    $data = $this->db->get('tblMessages'); 
    return $data->result(); 
} 
1

Können Sie Sitzung nicht verwenden, um die Benutzer-ID zu speichern, wenn der Benutzer sich anmeldet? Auf diese Weise können Sie die Benutzer-ID bei Bedarf haben.

 
// ... 

$fromID = $_SESSION['uid']; 
INSERT INTO `message` (`from_id`, `to_id`, `time`, `message`) VALUES('$fromID', '$toID', '$time', '$message') 

Natürlich haben wir hier nicht über Sicherheit gesprochen, daher ist der Code offensichtlich nicht sicher. Aber wir werden das für eine andere Diskussion verlassen. Habe ich dich in die richtige Richtung getreten? : p

+0

Ich dachte, das zu tun, aber wie bekommt meine from_id ein Wert? Woher kommt das? Ich habe kein Problem mit der Benutzer-ID aus der Sitzung, wenn der Benutzer sich anmeldet. – LondonGuy

+0

Nun, fügen Sie in die Datenbank natürlich. Ich habe gerade meine Antwort aktualisiert. Ich denke, es ist so etwas. – bertzzie

1

Ich bin nicht ganz sicher, ob ich dich vollständig verstehe. Sie laden die Nachrichten, in der Nachrichtentabelle haben Sie eine Spalte für die Benutzer-ID, aber Sie möchten den Benutzernamen auch mit einer einzigen Abfrage laden? Wenn so als so etwas wie dies tun würde, es

SELECT {was Sie haben wollen} FROM users u, Nachrichten m WHERE u.id = m.from_id

als in der SELECT-Mann Sie können die Benutzerdetails mit u.username abrufen, vorausgesetzt, Sie haben eine Username-Spalte in Ihrer Benutzertabelle.

0

ist mehr als nur ein wenig knowning über MySQL Joins. Es gibt viele Systeme, die Sie herunterladen können, um eine gute Idee zu bekommen, versuchen Sie es mit phpBB oder einer anderen Forensoftware.

Mit Private Message-Systemen ist es sehr einfach, etwas Mist zu machen, aber gute sind hart.

Denken Sie daran, wenn Sie Ihre Nachricht hat nur einen Eintrag wie das Beispiel von einem anderen Benutzer proivided:

INSERT INTO `message` (`from_id`, `to_id`, `time`, `message`) VALUES('$fromID', '$toID', '$time', '$message') 

, die in dem Posteingang der an Benutzer, und das gesendete Feld für die vom Benutzer zu zeigen, benötigen.Wenn der to_user es löscht, hat der from_user plötzlich keine Aufzeichnung der Nachricht.

Sie müssen eine Join-Tabelle erstellen, um alle Anhänge von Benutzern (nach oder von) aufzulisten, die mit der Nachrichten-ID verknüpft sind. Dann können Sie auch mehrere Benutzer haben!

Nachrichten sollten immer vorhanden sein, Benutzer "nur Müll" (setzen Sie is_trach auf 1 auf ihrer Verbindung). Wenn Benutzer aus dem Papierkorb löschen, löschen sie nur ihre Verbindung mit der Nachricht, und wenn der letzte Benutzer ihre Verbindung gelöscht hat, DANN können Sie sie löschen (oder einen Cron-Job erhalten, um verwaiste Nachrichten zu löschen).

Verwandte Themen