Frage von derhierxD, 40

PHP - MySQL (Freundschaftsanfrage "Benachrichtigung)?

Guten Abend,

ich arbeite momentan aus reiner lust und Laune an einem kleinen Projekt.

Dies beeinhaltet einige funktionen eines Sozialen Netzwerkes so sollen beispielsweise Nachrichten verschickt und Freundesanfragen versendet werden können.

Nun funktioniert beispielsweise meine Freundesliste wiefolgt.

Sendet Nutzer "Paul" dem Nutzer "Peter" eine Anfrage, wird die ID der beiden ermittelt und diese mit dem wert 0 in die Datenbank gespeichert. (user_x, user_y, beziehung)

ist nun also die Beziehung = 0, steht eine Anfrage von user_y (In diesem Falle Peter) noch aus. Andernfalls ändert sich dieser wert auf 1.

Ich würde gerne, die möglichkeit haben, nahe zu live die beziehung prüfen. Sollte also Peter nun eine Einladung bekommen haben, so wird diese direkt auf seiner Startseite angezeigt (also die "startseite" meiner Webseite"). An sich ist das kein Problem. Einfach eine SQL abfrage gestalten ob ein neuer Datensatz existiert.

Sollte ich nun aber angenommen 100000 Datensätze haben, (einhundert-tausend), kann ich ja nicht im sekundentakt, (also live) immer wieder und wieder abfragen ob jetzt ein Datensatz vorhanden ist.

Nun also meine Frage. Wie kann ich diese Art von benachrichtigung umsetzen?

Danke für eure Ratschläge! :)

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Broco, 7

Ich würde Anfragen und tatsächliche Freundschaften in zwei verschiedenen
Tabellen festhalten, einfach aus dem Grund der Übersichtlichkeit und
eventueller anderer Statusabfragen (Anfrage abgelehnt, Anfragen komplett
geblock, ohne Freunde zu sein, Anfrage neu angenommen, etc.).

Facebook macht das mittlerweile mit PUSH-Benachrichtigungen, ansonsten kannst du auch einfach bei jedem Neuladen einer Seite prüfen, ob eine neue Anfrage vorliegt.

Dritte Möglichkeit ist per AJAX (z. B. mit jquery) eine Anfrage mit timeout zu machen, z.B.:

function checkFriendRequests(){
$.ajax({
type: "POST",
url: "ajax/check_friend_requests.php",
success: function(antwort){
//Mach was mit der Antwort, z.B. ein Popup-Fenster anzeigen
}
});
}

//Alle 10 Sekunden checkFriendRequests ausführen
setInterval (checkFriendRequests, 10000);
Kommentar von derhierxD ,

Danke für die ausführliche Antwort!

Ich habe jedoch nicht sehr viel mit Ajax am Hut.

der Reiter "success" ist wahrscheinlich dazu da, die Funktion antwort aus zu führen sobald die Abfrage funktionierte (?)

Aber wie muss dann die check_friend_request.php aussehen? die SQL abfrage kommt natürlich dort hinein aber wie ist der Aufbau bzw. was muss die Datei beeinhalten, um Ajax so zu sagen bescheid zu geben das die Funktion antwort ausgeführt werden soll?

(ich hoffe man versteht mein Problem, Ajax war bisher noch nie sonderlich präsent bei mir daher leider auch kaum Erfahrung)

Antwort
von Kiboman, 27

dann musst du es umdesignen

verschiebe die offenen anfragen in eine eigene tabelle, und du bist das problem los.

Antwort
von happyfish2, 23

Index auf die UserID und nur diejenigen Datensätze abfragen, die die entsprechende UserID haben (... WHERE user_x = $eingeloggter_user)

Kommentar von derhierxD ,

beschleunigt das setzen des Index auf dem UserID die Abfrage?

PS: Ich bin nun auf ein kleines Problem gestoßen. Ich muss ja kontinuirlich die Datensätze abfragen. Aber PHP arbeitet lediglich von oben nach unten ab bzw. nicht dynamisch... wüsstest du da eventuell ein paar vorgehensweisen?

Kommentar von happyfish2 ,

Ja, der Index beschleunigt das ziemlich, siehe http://techblog.tilllate.com/2007/01/07/optimierung-von-mysql-abfragen-verwendun...

Dein "PS" verstehe ich aber nicht - was meinst du mit "von oben nach unten" und "nicht dynamisch"? Beides ist nur eine Frage dessen, wie man es programmiert.

Kommentar von Kiboman ,

mit ajax

bei richtiger Umsetzung hast du den ajax code aude der website

der immer wieder eine seite anfordert, und die dann via DOM auf deiner seite aktualisiert.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten