我有两张表,如下所示
表:行为
ViewBag.UserId
表:behaviour_actions
id - hash - page - timestamp
1 - abc - page 1 - 2016-06-06 13:20
2 - abc - page 2 - 2016-06-06 13:18
用户(哈希)在行为中有多个条目,在behaviour_actions上有多个条目。 我想要做的是加入两个表并按时间戳排序。
因此,最终结果将是两个表的混合,但与时间有关。
我在下面的查询不会按照我的意愿对它们进行排序,因为它不会根据时间将两个表中的每个条目放在彼此之下。我正在使用PHP。我能做些什么呢?
id - hash - page - action - timestamp
1 - abc - page 1 - form - 2016-06-06 13:19
2 - abc - page 2 - form - 2016-06-06 13:12
答案 0 :(得分:0)
join
结合了表行和#39;并排。听起来你应该使用union all
运算符来一个接一个地组合行:
SELECT page, timestamp
FROM behaviour
UNION ALL
SELECT page, timestamp
FROM behaviour_actions
ORDER BY 2 DESC
答案 1 :(得分:0)
这样的事情应该接近你所要求的。
SELECT 'ba' AS src
, ba.page
, ba.timestamp
, ba.action
FROM behaviour_actions ba
WHERE ba.hash = 'abc'
UNION ALL
SELECT 'b' AS src
, b.page
, b.timestamp
, NULL AS action
FROM behaviour b
WHERE b.hash = 'abc'
ORDER BY 2
请注意,要将两个查询排到"排队"对于UNION ALL操作,我们必须返回相同数量的列。因此,我们返回一个NULL值作为结果中action
列的占位符。我们可以轻松返回空字符串'' AS action
或任何其他表达式。但我们确实需要返回第四列,以便两个查询返回四列。
如果您希望首先列出behaviour
行,如果时间戳值匹配...
ORDER BY 2,1
如果您总是首先想要behaviour
行,
ORDER BY 1,2
不必返回第一列,即鉴别器列。但通常当我得到这样的结果集时,我也想知道哪个SELECT返回了行。在此示例中,值b
告诉我这是返回行的behaviour
的查询。值ba
告诉我,behaviour_actions
的查询返回了该行。