2013-03-26 145 views
0

我正在構建一個社交網絡頁面,並希望在一個提要頁面上獲取所有用戶的活動。使用一個MySQL查詢從兩個表中獲取數據?

我有一個意見表:

user_id comment    date 
1   "Hi...."    24 March 2013 
2   "Hello..."    25 March 2013 
1   "Another comment..." 26 March 2013 

而一個喜歡錶:

user_id id_of_liked_item  date 
1   101     24 March 2013 
1   145     25 March 2013 

是否可以執行單一查詢來獲取到這些用戶的所有活動的陣列,有序按日期?如果是的話,那個查詢看起來像什麼?我的陣列將需要看​​起來像這樣:

$activity = array(
    array(
     "type"=>"comment", 
     "content"=>"Comment goes here" 
    ), 
    array(
     "type"=>"like", 
     "item_id"=>345, 
    ) 
) 

我在操縱PHP數據相當不錯,所以我可能並不需要太多的幫助,組織陣列,但我的問題主要是如何獲取數據從數據庫首先。由於

+0

看看[SQL JOIN(http://www.w3schools.com/sql/sql_join.asp) – Daanvn 2013-03-26 15:34:32

回答

1

是的,聯盟的路要走:這會給你一個結果集,看起來像這樣

SELECT 'comment' AS Type, Comment AS Content, NULL as Item_ID, Date 
    FROM Comments 
    WHERE User_Id = 1 
UNION ALL SELECT 'like', NULL, id_of_liked_item, Date 
    FROM Likes 
    WHERE User_Id = 1 

Type Content   Item_ID Date 
------- ------------------ ------- ------------- 
comment Hi....    null 24 March 2013 
comment Another comment... null 26 March 2013 
like null    101  24 March 2013 
like null    145  25 March 2013 

而且你可以把它從那裏。

1

最簡單的方法很可能是使用工會:

SELECT 
    'comment' AS type, 
    comment AS content, 
FROM comments 
UNION 
SELECT 
    'like' AS type, 
    id_of_liked_item AS item_id 

你當然也可以由用戶在添加工會的條件WHERE和附加列每個查詢的組織。

1

嘗試使用UNION:

SELECT * FROM 
(SELECT `user_id`, `comment` AS activity, `date` FROM comments 

UNION 

SELECT `user_id`, `id_of_liked_item` AS activity, `date` FROM likes) 

AS user_activity 

ORDER BY user_activity.`date` 
相關問題