2014-09-01 24 views
0

我已經寫了社交流的MySQL查詢。僅一個多表的表獲取數據連接

這就是:

SELECT distinct(d.id), d.directory, u.name, u.pic 
FROM data as d, follow as f, users as u 
WHERE f.flwid = $id 
    AND f.status = 1 
    AND d.blocked = '0' 
    AND (d.upld_id = $id OR d.timeline_id = $id OR d.upld_id = f.acid OR d.timeline_id = f.acid) 
    AND (d.`with`<if(f.is_con=1,3,2) or d.`with`<if(d.upld_id=$id,4,2)) 
    AND u.id = d.upld_id 
ORDER BY 
    d.id DESC 
LIMIT 18 

現在上面的問題是,當用戶不遵循任何人(即遵循表中沒有針對特定用戶的任何行),它不會顯示用戶自己因爲在隨後的表中沒有行,所以兩個表都不加入,所以在家鄉流中發佈。

我無法配置我怎樣才能改變這種查詢我只用跟着表的corredentials 4-5的地方,我不能使用IN與子查詢,因爲子查詢會負擔過重的服務器:)

任何幫助,請它將非常感激。

目前,它提供了這樣的 數據如果用戶遵循的一個或多個民族/頁 比它顯示用戶自己跟着帳戶的帖子。

** **,但如果用戶不遵循任何其他帳戶指的是新註冊的用戶比他/她共享任何職位不首頁中顯示的,因爲後續的表不與其他兩個表加入因爲它沒有會話用戶的任何行。

編輯 上述SQL查詢返回包含用戶及其後續的唯一帖子的行。 我在PHP的幫助下在用戶帳戶的主頁中顯示這些帖子。 但我得到的問題是,當用戶在新的或他/她不跟着別人比超過爲什麼用戶自己的崗位也沒有她/他的帳戶的主出了後續的表不與數據表這就是加盟。有人幫助我解決我的SQL查詢。 我發現只是其中的用戶表,我將存儲列命名爲n_followings,並在獲取與查詢,我將使用PHP狀況數據的時間,如果n_followings == 0比我會用這個SQL查詢非SQL想法

SELECT <columns> FROM data where timeline_id='$;id' or upld_id='$id' 
+1

僅供參考,'DISTINCT'不是一個函數,它並不需要這樣的一個參數。這是一個適用於整個'SELECT'列表的關鍵字。 – Barmar 2014-09-01 14:57:06

+0

請提供您想要的數據和結果。幾乎不可能弄清楚你究竟在問什麼。 – Bulat 2014-09-01 14:58:22

+0

我再次編輯........................................ :) – 2014-09-19 15:53:29

回答

1

使用LEFT JOIN

SELECT d.id, d.directory, u.name, u.pic 
FROM data AS d 
JOIN users AS u ON u.id = d.upld_id 
LEFT JOIN follow AS f 
ON f.flwid = $id 
    AND f.status = 1 
    AND (d.upld_id = $id OR d.timeline_id = $id OR d.upld_id = f.acid OR d.timeline_id = f.acid) 
WHERE d.`with` < IF(f.is_con = 1, 3, 2) 
    OR d.`with` < IF(d.upld_id = $id, 4, 2) 
ORDER BY d.id DESC 
LIMIT 18 
+0

好的先生我將現在嘗試它,並會告訴它產生的 – 2014-09-02 00:46:33

+0

我已經檢查過它,它只顯示最後18行的數據表。 再次我想告訴我,我想顯示首頁流(數據)多數民衆贊成爲什麼情況是他們不只是加入表.................希望你會再次編輯你的答案謝謝你,我感謝你 – 2014-09-02 00:55:20

+0

我剛剛從原來的查詢中複製了「LIMIT 18」,這就是爲什麼它只顯示最後18行。 – Barmar 2014-09-02 17:05:33

相關問題