2009-06-26 3 views
0

Ich habe ein Problem, dass ich selbst nicht herausfinden kann. Ich habe versucht, LEFT JOIN usw. zu verwenden, aber nichts scheint zu funktionieren. Ich benutze MySQL, damit Sie es wissen.Erhalten Ergebnisse von meinen eigenen und "Freunde" Beiträge

Ich baue ein kleines Blogportal für mich und meine Freunde und alle Benutzer haben ihren eigenen Blog.

Datenbank:

Benutzer: id, Benutzername, Passwort, etc

Blog: id, Titel, Text, user_id, etc

Beziehungen follower_id, following_id

ich meine eigene Blogeinträge wie diese Abfrage:

SELECT * FROM microblog WHERE user_id = {$user_id} ORDER BY posted DESC 

und ich Liste meiner Freunde wie folgt aus:

SELECT * FROM users, relations WHERE relations.follower_id = {$user_id} AND relations.following_id = users.id 

Das ist der einfache Teil war. ABER.

Ich lieber die Tabellen irgendwie zu verbinden, weil ich auch meine Freunde Blogposts in meiner Schleife auflisten möchte. Aber ich will nicht nur, dass der Beitrag angezeigt wird, ich möchte auch Informationen über den Benutzer, der diesen Eintrag gepostet hat, dann muss ich auch einige Informationen aus der Benutzertabelle bekommen. Und das stört mich! Ich kann es nicht herausfinden.

Kurz gesagt: Ich möchte meine eigenen Blogposts und alle Benutzer, mit denen ich befreundet bin, in meiner eigenen Schleife auflisten. Und ich möchte neben den Beiträgen auch Benutzername und E-Mail anzeigen.

Ich hoffe, Sie verstehen, was ich meine.

/Tobias

Schweden

Antwort

0

Wie wäre es?

select 
    u.username, 
    u.email, 
    m.title, 
    m.text 
     -- ... etc 
from microblog m 
    inner join user u on m.user_id = u.id 
where m.user_id = {$user_id} 
    or m.user_id in (select 
         following_id 
        from relations r 
        where follower_id = {$user_id} 
        ); 
+0

, die wie ein Charme, wenn ich geändert: wo following_id = {$ user_id} zu wo follower_id = {User_id $} nun seine Arbeits und alles in phpMyAdmin zeigt aber, wenn ich versuche es dann die Daten nur ein Echo aus in "Microblog" Tabelle funktioniert. wenn ich zum Beispiel echo $ mblog-> username verwende; in einer foreach-Schleife funktioniert es nicht, bekomme ich: Undefinierte Eigenschaft: mBlog :: $ Benutzername in ....... aber sollte es da sein? – Tobias

+0

@Tobias: oops, yeah, ich meinte Follower da ... :) Willst du damit sagen, dass $ mblog-> title funktioniert, aber $ mblog-> username fehlschlägt? Können Sie den dort verwendeten Code posten? – Stobor

+0

Ich benutze 2 Klassen, eine für Benutzer und eine für Microblog, also glaube ich, dass ich irgendwie den Benutzernamen in meine Microblog-Klasse weitergeben muss. Ich habe versucht, es auf dem No-oop-Weg zu wiederholen und dann funktionierte es wie ein Zauber. – Tobias

0

die Sie interessieren?

SELECT m.* 
FROM microblog m 
INNER JOIN users u ON m.user_id = u.user_id 
LEFT JOIN relations r ON r.following_id = m.user_id 
WHERE m.user_id = {$user_id} 
OR (r.follower_id = {$user_id} AND NOT IsNull(r.follower_id)) 
ORDER BY posted DESC 
+0

Dies hilft mir, meine eigenen Beiträge und meine Freunde aufzulisten, aber ich möchte auch auflisten, wer sie geschrieben hat. Also muss ich den Benutzernamen aus der Benutzer-Tabelle auch – Tobias

+0

Dort bekommen. Funktioniert es? –

0

Aus meiner Sicht würde ich die Benutzerdaten getrennt abrufen, sie in einem Array speichern und bei Bedarf darauf zugreifen. Dies sollte für die Leistung besser sein und wäre auf jeden Fall einfacher.

select * from blog b, relations r 
where b.user = $user_id or (b.user = r.follower_id and r.following_id = $user_id) 
order by posted desc; 

Nicht sicher, ob ich Follower/folgende umgekehrt.

Verwandte Themen