mysql 个人博客应用的建表和相关查询
一、建表
用户表tb_user
create table if not exists tb_user(
user_id int auto_increment,
user_name varchar(32) not null,
user_password varchar(64) not null,
user_avatar varchar(128) default null,
user_city varchar(32) not null,
user_createdat datetime default current_timestamp,
user_updatedat datetime default current_timestamp on update current_timestamp,
primary key(user_id),
unique(user_name)
)default charset = utf8;
博客表tb_blog
create table if not exists tb_blog(
blog_id int auto_increment,
blog_user_id int not null,
blog_title varchar(100) not null,
blog_content varchar(1024) not null,
blog_createdat datetime default current_timestamp,
blog_updatedat datetime default current_timestamp on update current_timestamp,
primary key(blog_id),
foreign key(blog_user_id) references tb_user(user_id) on delete cascade on update cascade
)default charset=utf8;
标签表tb_tag
create table if not exists tb_tag(
tag_id int auto_increment,
tag_content varchar(16) not null,
primary key(tag_id)
)default charset = utf8;
博客标签表tb_blog_tag
create table if not exists tb_blog_tag(
blog_tag_id int auto_increment,
rel_blog_id int not null,
rel_tag_id int not null,
primary key(blog_tag_id),
foreign key(rel_blog_id) references tb_blog(blog_id) on delete cascade on update cascade,
foreign key(rel_tag_id) references tb_tag(tag_id) on delete cascade on update cascade
)default charset=utf8;
评论内容tb_comment
create table if not exists tb_comment(
comment_id int auto_increment,
comment_blog_id int not null,
comment_user_id int not null,
comment_content varchar(256) not null,
comment_createdat datetime default current_timestamp,
comment_updatedat datetime default current_timestamp on update current_timestamp,
primary key(comment_id),
foreign key(comment_blog_id) references tb_blog(blog_id) on delete cascade on update cascade,
foreign key(comment_user_id) references tb_user(user_id) on delete cascade on update cascade
)default charset = utf8;
二、相关查询
1.从用户表中查询beijing和shanghai的所有用户信息
select user_name,user_city
from tb_user
where user_city='beijing' or user_city='shanghai'; select user_name,user_city
from tb_user
where user_city in ('beijing','shanghai');
2.从用户表中查询2018-7-3 15:50:00至2018-7-3 15:53:00之间注册的所有用户信息
select user_name,user_city,user_createdat
from tb_user
where user_createdat > '2018-07-03 15:50:00' and user_createdat < '2018-07-03 15:53:00'; select user_name,user_city,user_createdat
from tb_user
where user_createdat between '2018-07-03 15:50:00' and '2018-07-03 15:53:00';
3.从用户表中找到最晚的注册时间
select max(user_createdat) from tb_user;
select max(user_createdat)abc from tb_user;
4.从用户表中查询每个城市的最晚注册时间(城市名称,时间)
select user_city,max(user_createdat)
from tb_user
group by user_city;
5.从用户表中查询最晚注册用户的信息
select user_name,user_createdat
from tb_user
where user_createdat = (select max(user_createdat) from tb_user);
6.每个城市的最晚注册用户的信息
前面已经得到了每个城市最晚注册时间表,只是还没有和用户关联起来,那么现在只需要把每个城市最晚注册时间表和用户表做迪卡尔积,再通过城市和时间这两个条件把满足条件的用户筛选出来
select user_name,tb_user.user_city,user_createdat
from tb_user
join (select user_city,max(user_createdat)m
from tb_user
group by user_city
)t
on tb_user.user_city = t.user_city and tb_user.user_createdat = t.m;
7.查询所有作者及其blog信息
select user_name,blog_title
from tb_user
join tb_blog
on user_id = blog_user_id;
8.查询所有作者及其blog信息,显示时,将一个作者写的所有博客标题放到一行显示
select user_name,group_concat(blog_title)
from tb_user
join tb_blog
on user_id = blog_user_id
group by user_name;
9.查询所有用户及其写的blog
select user_name,blog_title
from tb_user
left join tb_blog
on user_id = blog_user_id;
10.查询所有的博客及其标签信息
step1. 从tb_blog_tag找有标签的博客id以及他们的标签id
select rel_blog_id,rel_tag_id
from tb_blog_tag
step2. 将step1产生的结果集与标签表进行联合查询,找到标签id对应的具体标签内容
select rel_blog_id, tag_content
from tb_tag
join (
select rel_blog_id,rel_tag_id
from tb_blog_tag
)
on tag_id = rel_tag_id
step3.将一篇博客的多个标签放到一行显示
select rel_blog_id, group_concat(tag_content)
from tb_tag
join (
select rel_blog_id,rel_tag_id
from tb_blog_tag
)t
on tag_id = rel_tag_id
group by rel_blog_id
step4.将博客表tb_blog与step3产生的结果集进行联合查询,找到博客的具体信息
select blog_id,blog_title,tc
from tb_blog
left join (
select rel_blog_id, group_concat(tag_content)tc
from tb_tag
join (
select rel_blog_id,rel_tag_id
from tb_blog_tag
)t
on tag_id = rel_tag_id
group by rel_blog_id
)t1
on blog_id = rel_blog_id;
11.查询所有的博客及其标签信息和作者信息
这个就是在10题的基础上再和tb_user做一次笛卡儿积
select user_name,user_avatar,blog_id,blog_title,tc from tb_user join (
select blog_id,blog_title,tc,blog_user_id
from tb_blog
left join (
select rel_blog_id, group_concat(tag_content)tc
from tb_tag
join (
select rel_blog_id,rel_tag_id
from tb_blog_tag
)t
on tag_id = rel_tag_id
group by rel_blog_id
)t1
on blog_id = rel_blog_id
)t2
on user_id = blog_user_id;
mysql 个人博客应用的建表和相关查询的更多相关文章
- php源码建博客5--建库建表-配置文件-错误日志
主要: 整理框架 建库建表 配置文件类 错误日志记录 --------------本篇后文件结构:-------------------------------------- blog ├─App │ ...
- 用Mysql进行emp、dept、salgrade表的相关查询操作
初学者都会接触到三种表:emp.dept.salgrade表,进行练习各种语句操作再合适不过 但是,网上大多数的操作语句都是用oracle进行操作的,小编在学习mysql的时候,参考网上的书写遇到了不 ...
- 用 Flask 来写个轻博客 (20) — 实现注册表单与应用 reCAPTCHA 来实现验证码
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 reCAPTCHA 应用 reCAPTCHA 前文列表 用 Flask ...
- Express+mysql的博客(1)
学了东西一定要自己上手试过才知道是不是真的会了.一直想练练node的使用,本来也没有什么好想法的,经同学提醒了一下,发现其实我可以用node写一个博客.我同学说工作量会非常之大╮(╯_╰)╭那也得先试 ...
- mysql常用博客论坛
大神博客: starive的博客:http://blog.itpub.net/26435490/viewspace-1133659/ 北在南方的博客:http://blog.itpub.net/226 ...
- DS博客作业01--线性表
1.本周学习总结(0--2分) 1.1思维导图 1.2.谈谈你对线性表的认识及学习体会. 1.线性表的内容上了三星期的课,相对来说内容比较丰富,尤其是链表方面,包含单链表,双链表和循环链表.作为第一部 ...
- mysql系列博客
近期,打算开始我的sql之路了,计划写一些sql方面的博客,初步定的计划,先写mysql,如果有必要,再写oracle.mysql如下: 1.mysql的调优思路 2.mysql 的执行过程 http ...
- .NetCore WebApi + Vue +MySql搭建博客
因为我是一直写C#的,所以最近闲暇时间一直在学习.NET Core,该博客的后端使用的就是.NET Core WebApi然后加前端Vue. 首先后端.NET Core搭的框架是一个仓储层+服务层+A ...
- MYSQL 名人博客
: DavidYang的博客 - CSDN.NET DimitriK's (dim) Weblog Xaprb · Stay Curious! 飞鸿无痕的博客 - ChinaUnix博客 何登成的技术 ...
随机推荐
- Loadrunner实现多台测试机负载时可能遇到的难题
压测机安装的loadrunner版本为11.0 压测机器的操作系统是windows server 2016 所有的负载机器操作系统和压侧机器是一样的,都是windows server 2016 Err ...
- TP框架的模板路径问题以及常用的模板常量的定义
在TP框架中,为了各个模块加载静态文件方便,往往是不需要按照默认的方式放置静态文件到/app/模块名/VIEWS/下面,而是在顶级目录下创建一个新的目录(比如说./tpl目录下),来存放静态文件 ...
- JS高级程序随笔一
function Aarguments(x,y){ for(var i=0;i<arguments.length;i++){ alert(arguments[i]); }; }; Aargume ...
- k8s的快速使用手册
一.快速搭建文档 一.初始化kubernete kubeadm init --kubernetes-version=v1. --apiserver-advertise-address=192.168. ...
- HTML页面仿iphone数字角标
做仿iphone样式的数字角标,用简单的css来实现 <html><head><title>角标数字</title><style type=&qu ...
- ios开发之UIView和UIViewController
UIView 表示屏幕上的一块矩形区域,负责渲染区域的内容,并且响应该区域内发生的触摸事件.它在 iOS App 中占有绝对重要的地位,因为 iOS 中几乎所有可视化控件都是 UIView 的子类. ...
- go语言从例子开始之Example3.变量
在 Go 中,变量 被显式声明,并被编译器所用来检查函数调用时的类型正确性 package main import "fmt" func main() { var 声明 1 个或者 ...
- rabbitmq 发送的用户名是什么
消费的用户名也必须是什么 接收必须单独启动线程——否则mfc会崩溃 Sleep(30000); //30秒 只要你打开消费队列,只消费1个 队列中所有数据都丢失???????? 断线重连: 知道答案 ...
- Failed to resolve com.android.support:support-compat:25.4.0
3down votefavorite I am trying to include this library to my project by adding compile 'jp.wasabee ...
- QT问题解决
1.pro文件下各个变量的含义 https://www.zybuluo.com/breakerthb/note/582395 2.如何在pro文件中导入其他的库 https://blog.csdn.n ...