Mysql中使用UNION语句进行多表连接查询
2013-04-10 07:34
901 查看
用PHP编写了几个网页,直接使用内置函数链接Mysql数据库。在实用中遇到一个需求:有几个内容相类似的表(存放了新闻、公告类文章),想要以某些条件做出在几个表上的共同查询和排序模块。
例如以文章的点击数多少、发布时间的先后为条件,动态生成有用的排序列表(最新文章、最热点击等)。发现用SQL语句的UNION能轻松完成,而不用上升到脚本的层面了。
在标准SQL中的UNION语句如下:
其中有前提:每个SELECT的内容(表项)必须是相同的结构。详细的说,链接的表的列数必须互相相同,同时相对的列属性也必须相同。而列名可以不同(结构相同)
我有以下几个表:
News,Informs,Article,Intro
其中设计了结构均为相同的项有(不必全表相同,只需链接的项):
于是可以这样连接查询了:
或者以发布时间为条件,将ORDER句换成如下即可
注意一点表项的结构必须相同,比如两个表的id int(10) 如果其中一个换成id int(9) 也不行,查询将会报错。但可以有不同的名称(不推荐),查询结果列将以SQL收到的第一份列名为准输出
整个过程非常轻松,强大的SQL方法,省却了将工作上升到脚本层的情况。不再去用各种繁杂的字符串比较来完成。
再提一点,默认的UNION只获取表中不同的值,有相同的重复条目会被忽略,如果要计入重复条目,则使用UNION ALL 语法,用法相同。
我的使用结果:
例如以文章的点击数多少、发布时间的先后为条件,动态生成有用的排序列表(最新文章、最热点击等)。发现用SQL语句的UNION能轻松完成,而不用上升到脚本的层面了。
在标准SQL中的UNION语句如下:
SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
其中有前提:每个SELECT的内容(表项)必须是相同的结构。详细的说,链接的表的列数必须互相相同,同时相对的列属性也必须相同。而列名可以不同(结构相同)
我有以下几个表:
News,Informs,Article,Intro
其中设计了结构均为相同的项有(不必全表相同,只需链接的项):
`id` int(10) NOT NULL AUTO_INCREMENT, `title` varchar(100) DEFAULT NULL, //标题 `tablenm` varchar(10) DEFAULT NULL, //表名,方便查找 `pageview` int(10) DEFAULT NULL, //浏览数 `pubtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, //发布时间 PRIMARY KEY (`id`)
于是可以这样连接查询了:
$hotnews=mysql_query("SELECT id,title,pageview,tablenm FROM News UNION SELECT id,title,pageview,tablenm FROM Informs UNION SELECT id,title,pageview,tablenm FROM Article UNION SELECT id,title,pageview,tablenm FROM IntroORDER BY pageview DESC limit 15",$conn);//获取在四个表中按浏览数高低排序的前15个文章
或者以发布时间为条件,将ORDER句换成如下即可
ORDER BY pubtimew DESC limit $limit //$limit可设为需列举的数
注意一点表项的结构必须相同,比如两个表的id int(10) 如果其中一个换成id int(9) 也不行,查询将会报错。但可以有不同的名称(不推荐),查询结果列将以SQL收到的第一份列名为准输出
整个过程非常轻松,强大的SQL方法,省却了将工作上升到脚本层的情况。不再去用各种繁杂的字符串比较来完成。
再提一点,默认的UNION只获取表中不同的值,有相同的重复条目会被忽略,如果要计入重复条目,则使用UNION ALL 语法,用法相同。
我的使用结果:
相关文章推荐
- Mysql中使用UNION语句进行多表连接查询
- 在MySQL中使用JOIN语句进行连接操作的详细教程
- JAVA连接MYSQL,使用PreparedStatement 写查询,修改,添加,删除,语句
- 【MySQL】如何使用C#+MySQL实现一条MySQL语句进行多表查询
- 【MySQL】如何使用C#+MySQL实现一条MySQL语句进行多表查询
- 在MySQL中使用JOIN语句进行连接操作的详细教程
- Mysql模糊查询like效率,以及更高效的写法 在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时
- 两种使用nuzt接收动态参数编写SQL语句进行分页查询
- excel内一键进行sql查询(使用方法 1.选择’需要进行sql查询区域 包括字段名 2 输入sql语句 3.选择输出数据的单元格)
- 使用sqldeveloper连接到远程的oracle服务器,并执行查询语句
- 在Hibernate中使用HibernateTemplate来进行包含sql语句的查询
- mysql(4)—— 表连接查询与where后使用子查询的性能分析。
- 使用Jmeter对Mysql进行压力测试无法执行多条sql语句问题
- Excel 中使用SQL 语句查询数据(八)-----用Group by 进行分组统计
- MySQL 使用explain分析sql语句的查询效率(一)
- ef core 使用include进行外键连接查询
- Mybatis使用MySQL进行模糊查询时输入中文检索不到结果
- mysql求交集:UNION ALL合并查询,inner join内连接查询,IN/EXISTS子查询
- MySQL优化:使用慢查询日志定位效率较低的SQL语句
- [SSIS] 在脚本里面使用数据库连接字符串进行查询等处理, 入坑