Benim kendi sonuçlarını ve "arkadaşlar" Get

3 Cevap php

Kendimi anlamaya olamaz bir sorun var. Ben SOL vb JOIN kullanarak denedim ama hiçbir şey iş gibi görünüyor. Sen bilirsin ben MySQL kullanıyorum.

Ben ve arkadaşlarım için biraz blogportal inşa ediyorum ve tüm kullanıcıların kendi blogu var.

veritabanı:

users: id, username, password, etc

blog: id, title, text, user_id, etc

relations follower_id, following_id

Bu gibi benim kendi blogposts sorgulamak:

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

ve ben böyle benim arkadaş listesi:

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

Bu kolay bir parçasıydı. AMA.

Ben de döngü içinde benim arkadaşlarım blogposts listelemek istiyorum çünkü oldukça nasılsa tabloları JOIN. Ama sadece ben de bir o kadar zaman ben de kullanıcıların tablodan bazı bilgi almak gerektiğini yayınlanmıştır kullanıcı hakkında biraz bilgi istiyorum, sonrası göstermek istemiyorum. Ve bu beni rahatsız ediyor ne! Ben onu anlamaya olamaz.

Kısacası: Ben kendi blog yazılarını ve benim kendi içinde döngü ile dostuyum tüm kullanıcıları listelemek istiyorum. Ve ben de mesajların yanında kullanıcı adı ve e-posta görüntülemek istiyorum.

Ne demek istediğimi anlamak umuyoruz.

/ Tobias

İsveç

3 Cevap

Ne dersiniz?

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}
                    );

Benim bakış açısıyla ben, ayrı ayrı kullanıcı verileri çekeceği onları bir diziye depolamak ve gerektiğinde onlara erişim. Bu performans için daha iyi olmalı ve kesinlikle basit olurdu.

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;

Ben aşağıdaki / takipçi tersine emin değilim.

Bu deneyin?

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