2014-10-04 68 views
0

我在我的所有不同類型的活動數據將被存儲管理員一樣的活動,用戶活動,公司活動等表格式如下表news_feed如何基於一個表中的列值連接表

news_id | type | admin_id | user_id | company_id 
1  | admin | 2  | 3 |  0  
2  | user | 3  | 4 |  1  
3  | company | 0  | 1 |  2  

假設一個id 1用戶已經喜歡具有ID 2,那麼該記錄將被插入像

4  user  0   1   2 

公司與我列出這些我模塊和上市是完美的。但是,假設公司ID 2不存在或者它不活動,則列表中的news_feed塊變空。我想要做的是:

  1. 如果類型爲公司再加入company表,同時與條件狀況選擇上市作爲活躍

  2. 如果類型用戶再加入user表而與條件狀況選擇上市作爲活躍

+0

做MySQL中的Conditional Join你想要做的所有這些在一個查詢? – 2014-10-04 05:31:23

+0

@isim是因爲我需要做pagination.I上市可以做檢查對於每個記錄,但分頁將突破在這種情況下 – Gautam3164 2014-10-04 05:32:18

回答

0

那麼你可以使用UNION針對此問題

SELECT t.column1, t.column2, t.column3 
FROM my_table t INNER JOIN company_table c 
ON t.company_id = c.id 
WHERE c.active=1 AND t.type = "company" 
UNION 
SELECT column1, column2, column3 
FROM my_table t INNER JOIN user_table u 
ON t.user_id = u.id 
WHERE c.active=1 AND t.type = "user" 

我想補充,增加efiiciency使用UNION ALL而不是UNION(或UNION DISTINCT)作爲UNION需要內部臨時表與索引(跳過重複的行),而UNION ALL將創建表沒有這樣的索引,但要記住它會跳過重複的數據。

但更優化的方式使用INNER JOIN

SELECT t.column1, t.column2, t.column3 
FROM my_table t 
INNER JOIN company_table c 
ON (t.company_id = c.id AND t.type = "company" AND c.active=1) 
INNER JOIN user_table u 
ON (t.user_id = u.id AND t.type = "user" AND u.active=1); 
+0

@ Gautam3164:這應該幫助,請檢查。 – 2014-10-04 12:17:20

相關問題