2013-03-26 158 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` 
相关问题