2014-03-04 32 views
1

我的其中子句假設獲取所有狀態更新並檢查發佈它們的用戶是否針對阻塞表。WHERE子句需要附加子句 - 我認爲

只要用戶沒有被登錄的用戶阻止,就讓狀態顯示出來。

其中子句當前詢問如果狀態應該顯示,該塊應該不活動,這是正確的。

問題是,在目前,如果任何用戶對某人有活動阻滯,結果將不會顯示爲活動,說是。

實施例:

採取3個用戶;
湯姆,比爾約翰

顯示所有狀態更新。
如果湯姆比爾湯姆不再能看到比爾更新和比爾無法看到湯姆。 - (這是應該的了。)

但現在因爲對比爾積極塊由湯姆約翰看不到他的任何更新。

我的WHERE子句不太正確嗎?

//Get status results 
     $sql = "SELECT 

     tbl_status.id as statID, 
     tbl_status.from_user as statFROM, 
     tbl_status.status as statSTATUS, 
     tbl_status.deleted as statDEL, 
     tbl_status.date as statDATE, 

     tbl_users.id as usrID, 
     tbl_users.name as usrNAME, 
     tbl_users.location as usrLOCATION, 
     tbl_users.postcode as usrPOSTCODE, 

     tbl_blocking.id as blockID, 
     tbl_blocking.user as blockUSER, 
     tbl_blocking.blocking as blockBLOCKING, 
     tbl_blocking.date as blockDATE, 
     tbl_blocking.active as blockACTIVE 

     FROM tbl_status 

     INNER JOIN tbl_users ON tbl_status.from_user = tbl_users.id 
     LEFT JOIN tbl_blocking ON tbl_users.id = tbl_blocking.user 

     WHERE 
     tbl_status.deleted = '0' 
     AND (tbl_blocking.user IS NULL 
     OR (tbl_blocking.active = '0' 
     AND tbl_blocking.user != :who 
     AND tbl_blocking.blocking != :who)) 

     ORDER BY 
     tbl_status.date desc 

     LIMIT 200 

     "; 
+0

「WHERE tbl_blocking = 'X'」 原來是什麼外部聯接成一個內圈之一。將這些條件移動到JOIN子句(NULL值可以保留在它的位置!)。並閱讀表別名。 – Strawberry

+0

我不太明白。你能再解釋一下嗎?我對此有點新。這不是WHERE子句,它是JOIN? –

回答

0

通過解釋...

SELECT s.id  statID 
     , s.from_user statFROM 
     , s.status statSTATUS 
     , s.deleted statDEL 
     , s.date  statDATE 

     , u.id  usrID 
     , u.name  usrNAME 
     , u.location usrLOCATION 
     , u.postcode usrPOSTCODE 

     , b.id  blockID 
     , b.user  blockUSER 
     , b.blocking blockBLOCKING 
     , b.date  blockDATE 
     , b.active blockACTIVE 

    FROM tbl_status s 

    JOIN tbl_users u 
    ON u.id = s.from_user 

    LEFT 
    JOIN tbl_blocking b 
    ON b.user = u.id 
    OR ( b.active = 0  -- this might not be quite right!!! 
     AND b.user != :who 
     AND b.blocking != :who 
     ) 

    WHERE s.deleted = 0 
    AND b.user IS NULL 

    ORDER 
    BY s.date DESC 

    LIMIT 200 
+0

謝謝,但這只是繼續做 –

+0

之前做的事我不明白你爲什麼有或在那裏。這不應該是和? – Strawberry