Mysql中使用UNION語句進行多表連線查詢

2021-06-13 14:13:53 字數 1451 閱讀 6442

用php編寫了幾個網頁,直接使用內建函式鏈結mysql資料庫。在實用中遇到乙個需求:有幾個內容相類似的表(存放了新聞、公告類文章),想要以某些條件做出在幾個表上的共同查詢和排序模組。

在標準sql中的union語句如下:

select column_name(s) from table_name1

union

select column_name(s) from table_name2

我有以下幾個表:

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的like語句及UNION使用

like語句是用來做資料庫的模糊查詢語句。具體的sql語句如 select from 表名 where 需要模糊查詢的欄位名 like a 比如 selsect from t student where stu name like 王 這樣就可以查詢stu name欄位內所有帶有 王 這個字的字段。...

hive sql 中使用 if 語句

hive sql 中使用 if 語句 hive 是數倉管理中重要的一環,尤其是sql的書寫時大家在執行任務時中最重要的,關係到任務的執行快慢和正確性 今天就來看一下hive中的sql 的使用 案例 insert into table ads sale tm category1 stat mn sel...

mysql使用union順序混亂

使用mysql用union並子集中用order by排序順序會混亂 1.select id from a order by start time asc union all select id from b order by start time desc limit 0,20 這樣的寫法會導致排序...