三条mysql语句union连接_Mysql中使用UNION语句进行多表连接查询
发布日期:2021-06-24 17:57:15 浏览次数:2 分类:技术文章

本文共 1265 字,大约阅读时间需要 4 分钟。

用PHP编写了几个网页,直接使用内置函数链接Mysql数据库。在实用中遇到一个需求:有几个内容相类似的表(存放了新闻、公告类文章),想要以某些条件做出在几个表上的共同查询和排序模块。

例如以文章的点击数多少、发布时间的先后为条件,动态生成有用的排序列表(最新文章、最热点击等)。发现用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 语法,用法相同。

我的使用结果:

0818b9ca8b590ca3270a3433284dd417.png

转载地址:https://blog.csdn.net/weixin_34237700/article/details/113653383 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:mysql多源复制 错误_MySQL 5.7.9多源复制报错修复
下一篇:mysql数据库添加不执行输入语句_已经链接到了数据库并且没有报错,但是就是不能用insert into语句进行添加...

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月17日 12时22分12秒