首页 新闻 赞助 找找看

mysql 表的设计和查询问题(联合查询?)

0
悬赏园豆:20 [已解决问题] 解决于 2018-05-02 10:37

我有这么一个问题:

两份数据:

一份是用户一天内的搜索日志,记录了用户id,搜索词keyword,搜索时间time

一份是用户一天内的点击日志,记录了用户id,点击词keyword,点击时间time

问题:

如何设计表 能查询出来一个用户一天的所有行为(时间顺序),我建了两个表搜索和点击表,记录两份数据上述内容 但是似乎无法联合查询出来,所以请教一下

补充:

用户搜索 点击 一天内有一次到多次

比如:

id: 1234: 8:00搜索"博客园"
       8:02点击"博客园"
       8:04点击"博问"

       12:00搜索"myskl"

       12:01搜索"mysql"

像这样

燃烧的小腿毛的主页 燃烧的小腿毛 | 初学一级 | 园豆:166
提问于:2018-04-27 09:52
< >
分享
最佳答案
1

如果强行用你给出的表结构,两个表时间分开排序,可以用:

select t1.keyword(搜索词),t2.keyword(点击词),t1.time(搜索时间),t2.time(点击时间) from table1 t1,table2 t2 where t1.id=t2.id order by t1.time,t2.time

你给出的表结构不能把两张表的时间综合排序,要设计为一张表

id  keyword  type(点击/搜索)  time

select * from table order by time

收获园豆:20
小光 | 小虾三级 |园豆:1766 | 2018-04-27 14:14

确实我的那样两个表不行,你和楼上的想法的确更好,这样应该可以先根据id排序,然后id相同的再按时间排序,这样就能把每个用户的行为展示出来了

燃烧的小腿毛 | 园豆:166 (初学一级) | 2018-04-27 15:32

@燃烧的小腿毛: 对喽

小光 | 园豆:1766 (小虾三级) | 2018-04-27 15:38
其他回答(4)
0

这个貌似没法同时查2张没有关联字段的表 ,  查2张表  ,然后结果按日期合并

河畔 | 园豆:738 (小虾三级) | 2018-04-27 10:22
0

表字段{id(用户id),createTime(访问时间),tpye(类型,如1是点击,2是搜索),remark(点击或搜索内容)}。

sql 就不写了,按时间排序就行,其他的业务层处理

小子贪欢 | 园豆:208 (菜鸟二级) | 2018-04-27 12:24
0

你都不用建表,建个视图

猝不及防 | 园豆:2731 (老鸟四级) | 2018-04-27 16:58

能详细说下吗,从来没有用过视图,对mysql也是刚刚开始使用

支持(0) 反对(0) 燃烧的小腿毛 | 园豆:166 (初学一级) | 2018-04-27 17:07

@燃烧的小腿毛: 类似于建了一个虚拟表,这个虚拟表的字段是你现有表的字段,你可以随便加,然后这个虚拟表(视图)跟实体表一样去查询

支持(0) 反对(0) 猝不及防 | 园豆:2731 (老鸟四级) | 2018-04-27 17:31
0

两个结果集合并,用 union 关键词

西漠以西 | 园豆:1675 (小虾三级) | 2018-05-02 10:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册