使用一个MySQL查询从两个表中获取数据?
我正在构建一个社交网络页面,希望在一个提要页面上获取用户的所有活动 我有一个评论表:使用一个MySQL查询从两个表中获取数据?,mysql,social,Mysql,Social,我正在构建一个社交网络页面,希望在一个提要页面上获取用户的所有活动 我有一个评论表: user_id comment date 1 "Hi...." 24 March 2013 2 "Hello..." 25 March 2013 1 "Another comment..." 26 March 2013 还有一张桌子: user_id id_o
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,
)
)
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
我非常擅长处理php数据,因此我可能不需要太多帮助来组织数组,但我的问题主要是首先如何从数据库中获取数据。谢谢最简单的方法可能是使用工会:
SELECT
'comment' AS type,
comment AS content,
FROM comments
UNION
SELECT
'like' AS type,
id_of_liked_item AS item_id
当然,您也可以在联合中为用户组织的每个查询添加
WHERE
条件和附加列。最简单的方法可能是使用联合:
SELECT
'comment' AS type,
comment AS content,
FROM comments
UNION
SELECT
'like' AS type,
id_of_liked_item AS item_id
当然,您也可以在联合中为用户组织的每个查询添加
WHERE
条件和附加列。是的,联合是一种方法:
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
这将为您提供一个如下所示的结果集:
$activity = array(
array(
"type"=>"comment",
"content"=>"Comment goes here"
),
array(
"type"=>"like",
"item_id"=>345,
)
)
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
你可以从那里得到它。是的,工会是前进的道路:
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
这将为您提供一个如下所示的结果集:
$activity = array(
array(
"type"=>"comment",
"content"=>"Comment goes here"
),
array(
"type"=>"like",
"item_id"=>345,
)
)
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
您可以从那里开始使用。尝试使用一个接头:
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`
尝试使用联合:
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`
看一看,看一看