WIE? ->Facebook: Pinnwand funktion (abfrage, anzeige)

harder_xbx

Grünschnabel
ALso ich und kollege haben uns mal gefragt wie macht facebook das mit der Pinnwand

Also wir sind so weit gekommen:
du hast
200 freunde auch dementsprechend 200 User_id
die müssen jetzt ja abgefragt werden in der db tabelle "pinnwand" (von User :: message :: date)<--beispeile tabelle mysql
aber vorher wohl alle User_id auflisten die der user hat

so unsere frage ist eben wie die Db abfrage ausieht das nur die meldungen kommen die auch deine freunde sind.
Wir kamen drauf ein schleife zu machen aber rein theoritisch würde es dann zu 200 db anfragen kommen oder irren wir uns da weil das haut ja die performence ja um!?
weil nehmen wir ma du hast 1000 freunde in der liste xD
Also uns geht es nur um die abfrage nicht die begrenzung (z.b 20 letzten pinnwand einträge)

ich hoffe ichhab mich klar und deutlich ausgedrückt
das thema hat uns 3 stunden beschäfftigt heute und wir sind zu keinem ergebinss gekommen :D
 
Hallo,

angenommen ihr habt folgendes Datenbankschema:

users: [user_id, name]
friendships: [user_id, friend_user_id]
wall_entries: [user_id, text, timestamp]

Dann könnte eine Abfrage der letzten 20 Pinnwandeinträge deiner Freunde so aussehen:
SQL:
SELECT
  friends.user_id,
  friends.name,
  wall_entries.text,
  wall_entries.timestamp
FROM
  friendships
INNER JOIN
  users AS friends ON (users.user_id = friendships.friend_user_id)
INNER JOIN
  wall_entries ON (wall_entries.user_id = friends.user_id)
WHERE
  friendships.user_id = $user_id
SORT BY
  wall_entries.timestamp DESC
LIMIT
  20

\edit: Noch eine Alternative:
SQL:
SELECT
  friends.user_id,
  friends.name,
  wall_entries.text,
  wall_entries.timestamp
FROM
  wall_entries
INNER JOIN
  users AS friends ON (users.user_id = wall_entries.user_id)
WHERE
  wall_entries.user_id IN (
    SELECT friend_user_id
    FROM friendships
    WHERE user_id = $user_id
  )
SORT BY
  wall_entries.timestamp DESC
LIMIT
  20

Grüße,
Matthias
 
Zuletzt bearbeitet von einem Moderator:

Flex

(aka Felix Jacobi)
Ich verstehe ehrlich gesagt dein Problem jetzt nicht...?

Die Tabelle Pinnwand, skizziert:
[Besitzer]
[Schreiber]
[Nachricht]
[Datum]

Und wenn ich nun alle Einträge meiner Pinnwand haben will, lese ich halt alle Einträge aus, wo ich der Besitzer bin...
Und wenn ich alle Einträge haben möchte, die von meinen Freunden sind, dann benutze ich ein Subselect als Bedingung, so dass nur die meiner Freunde ausgelesen werden...
 

Blackout289

Grünschnabel
Joo,
hab grad das Thema gefunden (mit der Suche ;D) und jetzt steh ich total aufm Schlauch :D
Meine Tabellen sehen folgendermaßen aus:
users: id|name|...
friends: freundaid|freundbid|... (entweder ist man selbst a oder b, was auch mein problem ist ;D)
pinnwand: autorid|...

Wäre cool wenn mit jemand helfen könnte :)

Danke