• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

NachrichtenStrom, Schleifenprobleme :(

BDG

Mitglied
Hey Leute.
Wir haben eine Tabelle "feed", wo dann so Einträge drin sind, woraus wir sehen, dass z.B. user 5 jetzt mit user 2 befreundet ist, oder user 4 etwas geändert hat, blaaa.
Nun soll natürlich jeder user den feed SEINER Freunde sehen.
Deswegen haben ich eine foreach Schleife, die alle Freunde durchläuft. Und in dieser foreach schleife dann eine, die den feed raussucht, wo der jetzige Freund beteiligt ist,
und der wird dann ausgegeben. Der feed soll aber ja Zeitgeordnet sein.
Aber bis jetzt sieht der feed dann so aus :

BDG ist mit Blaa befreundet. 6 mins ago.
BDG hat jenes gemacht. 1 day ago.
BDG ist jetzt 14 Jahre alt. 1 week ago.
Thozz ist jetzt mit Admin befreundet. 2 min ago.
Thozz ist süß. 14 min ago.

Also das bei jedem Freund das einzeln geordnet wird, nach zeit... Und jeder nacheinander... Wie kann ich das anders machen ?
Habt ihr da eine Idee ?
Das währe echt super nett !

Mit freundlichen Grüßen,

BDG
 
Werbung:
Mehr mit der Datenbank arbeiten, hole über einen Join nur die Feeds, die auch ausgegeben werden und dort kannst du gleich ein Limit setzen und nach Eintragungszeitpunkt sortieren.

Für mehr, bitte Tabellenstruktur ;)
 
:D Versteh ich nich... Was ist ein join ? :D
Struktur :
id : auto increment, is auch primary key.( selbsterklärend)
user_id : Gibt die id von dem User an, der etwas gemacht hat. Bsp : wenn ich ein "Dash" like, dann ist user id = meine.
action_id : Gibt an, was passiert ist. 0 = neue Freundschaft, 1 = Dash geliked, 2 =......
about_id : Gibt an, auf wen sich das bezieht, also wenn ich mit id17 befreundet bin z.B.
datetime : selbsterklärend :D

Also wenn ich jetzt mit Blaa befreundet bin könnte das so aussehen : 1, 2, 0, 3, *zeit*

PS: Alles is PDO^^
 
Werbung:
Ohje, dann halt mit Subselect. Und wie sieht die Relationstabelle für Freunde aus? Oder schreibst du die Freunde in den Userdatensatz?

Mit Relationstabelle & Subselect könnte es so aussehen:
Code:
SELECT *
FROM feeds f1
WHERE f1.about_id IN (
    SELECT f2.friend_id
    FROM friends f2
    WHERE f2.user_id = 1
)
ORDER BY datetime DESC
 
Aber ein Problem gibt es da noch. Folgender, noch nie vorher dagewesener Fehler tritt auf :


  • Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)' in /usr/www/users/dashfr/beta/basti/testOrdner/core/scripts/portal/show_feeds.php:13 Stack trace: #0 /usr/www/users/dashfr/beta/basti/testOrdner/core/scripts/portal/show_feeds.php(13): PDOStatement->execute(Array) #1 /usr/www/users/dashfr/beta/basti/testOrdner/portal.php(48): include('/usr/www/users/...') #2 {main} thrown in/usr/www/users/dashfr/beta/basti/testOrdner/core/scripts/portal/show_feeds.phpon line 13


    Hier mal der dazugehörige Code :

    PHP:
    $query = $conn->prepare('SELECT * FROM '.$tb['feed'].' WHERE '.$feed['user'].' IN                         (SELECT * FROM '.$tb['conre'].' WHERE '.$cr['to'].' = :u_id OR '.$cr['from'].' = :u_id AND '.$cr['state'].' = :state)                        OR '.$feed['about'].' IN                        (SELECT * FROM '.$tb['conre'].' WHERE '.$cr['to'].' = :u_id OR '.$cr['from'].' = :u_id AND '.$cr['state'].' = :state)                        OR '.$feed['user'].' = :u_id OR '.$feed['about'].' = :u_id                        ORDER BY datetime DESC LIMIT 20');$query->execute(array(    ':u_id' => $user_id,    ':state' => $state));$result = $query->fetchAll();

    Was is da falsch gemacht ?

Edit : Man ! Er nimmt immer die Formatierung im Code raus ! Hier eeeeetwas besser : http://pastebin.com/DUV9Csph
 
Werbung:
Zurück
Oben