2016-09-28 2 views
-3

Ich entwickle eine iOS-App für soziale Netzwerke mit einem PHP-Backend mit einer MySQL-Datenbank. Ich habe 3 Tabellen in meiner Datenbank, um Posts, Kommentare und Likes zu speichern.Wie kann ich "Like" -Daten von MySQL effizient abfragen?

Gegenwärtig fordert die App bis zu 50 Beiträge gleichzeitig an, die verschiedene spezifische Daten enthalten. Ich mache dies mit einer SELECT-Abfrage von MySQL. Meine 'Likes' werden in der 'Likes-Tabelle' als 1 Like pro Zeile gespeichert. Dies beinhaltet ihren Benutzernamen und den Beitrag, den sie "gemocht" haben.

Wenn die App aktualisiert wird, muss ich die "Likes" -Daten für die Posts sammeln, die gerade geladen wurden. Mein Problem ist, dass ich den besten Weg nicht kenne, MySQL abzufragen, um alle verbundenen Likes mit diesem Benutzer zurückzugeben. Das bedeutet, dass ich beim Laden einiger Posts sehen möchte, welche Posts sie bereits gemocht haben.

Hier ist eine visuelle Beschreibung meines Problems: Here is a visual description of my problem

Bitte, dass 50 dieser Stellen verstehen up wird auf einmal gezeigt werden.

+0

Sie bitte Ihre Tabellendefinitionen hinzufügen und die SELECT-Abfragen Sie versucht. – MichielB

+0

Keine Bilder anzeigen, Tabellendefinitionen mit Indizes anzeigen –

Antwort

0

Es gibt mehrere Möglichkeiten dies zu tun und abhängig von Ihrem Projekt möchten Sie vielleicht meine Antwort optimieren.

Ich nehme an, Ihre Likes Tabelle hat eine Struktur von (int) id, (int) user_id, (int) post_id.

Um direkt auf Ihre Frage zu antworten (über eine Abfrage nur für die Aktualisierung), die nächste MySQL-Abfrage wird Ihnen die Liste der post_id von den Benutzer gefallen. Sie müssen %user_id% durch die ID des Benutzers und %post_ids% durch die Liste der 50 Beiträge IDs, getrennt durch ein Komma ersetzt werden:

SELECT post_id 
FROM Likes 
WHERE user_id = %user_id% AND 
     post_id IN (%post_ids%) 

Wenn jedoch die Refresh die ganze Seite impliziert (und nicht nur eine AJAX-Anforderung oder so weiter) Ich würde in Erwägung ziehen, dies direkt in der Abfrage zu implementieren und die Posts zu erhalten. Zum Beispiel:

SELECT p.id, p.content, p...., l.id AS `Liked` 
FROM Posts AS p 
LEFT JOIN Likes AS l 
     ON p.id = l.post_id AND 
      l.user_id = %user_id% 
WHERE ... 

Bitte beachten Sie auch das Hinzufügen von Indizes auf den rechten Spalten.

+0

Vielen Dank. Der zweite Code, den Sie dort angegeben haben, war sehr hilfreich. Ich werde aktualisieren, sobald ich implementiert und getestet habe! – Ollie

+0

Danke nochmal, ich habe meine Lösung unten hinzugefügt :) – Ollie

0

Wie versprochen, ist meine Lösung hier:

SELECT `posts`.`postnumber`, `posts`.`message`, `likes`.`didLike` 
FROM `posts` 
LEFT JOIN `likes` 
ON `posts`.`postnumber`=`likes`.`post_id` 
AND `likes`.`user_id`='USERNAME'; 
Verwandte Themen