日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 备份html数据_MySQL自动化生成HTML页面(导出数据)极限SQL编程-sql文件怎么打开...

發布時間:2023/12/2 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 备份html数据_MySQL自动化生成HTML页面(导出数据)极限SQL编程-sql文件怎么打开... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今日客戶要求表內的數據依據某種分組生成HTML頁面進行展示,一般處理這種需求直接上編程工具就好了,從數據庫里讀取數據,根據規則生成字符串,最后將字符串寫出到文件。由于需求比較急,作為數據庫編程系列文章,如果能用SQL實現首選還是SQL,這樣處理既直接又快速,不過針對SQL要真的有耐心和信心寫完,調試更是崩潰。由于要寫出文件到硬盤,最后還是選擇MySQL作為數據庫工具,Navicat作為開發工具。

有兩張表計劃表、市縣表,二者依靠市縣編碼(sxbm)進行等值連接,計劃表內含有各個學校投放在各個市縣的專業代號(zydh),專業名稱(zymc)、招生備注(bz)、學制(xz)、要求的學歷(xl)、計劃數(jh)等字段組成的計劃信息,院校編碼(yxbm)為學校的兩位數編碼,院校代號(yxdh)為院校編碼(yxbm)+市縣編碼(sxbm)組成的四位數編碼,院校代號其實可以區分出學校在哪個市縣的投檔的專業計劃。要求以學校為單位創建HTML頁面,頁面首先要以市縣作為表格分割,然后根據專業代號排序。具體實現過程如下:

創建計劃表:CREATE TABLE `zzjh2019v` (

`YXDH` varchar(9) COMMENT '學校代號',

`YXMC` varchar(54) COMMENT '學校名稱',

`ZYDH` varchar(2) COMMENT '專業代號',

`ZYMC` varchar(28) COMMENT '專業名稱',

`XZ` varchar(3) COMMENT '學制',

`XL` varchar(4) COMMENT '學歷',

`JH` varchar(6) COMMENT '招生計劃數',

`BZ` varchar(200) COMMENT '備注',

`yxbm` char(2) COMMENT '學校編碼',

`sxbm` char(2) COMMENT '市縣編碼'

) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Compact;

創建市縣編碼表:CREATE TABLE `sx` (

`sxbm` char(2) COMMENT '市縣編碼',

`sxmc` varchar(20) COMMENT '市縣名稱'

) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Compact;

糾結了很久這個東西怎么寫,最后采取游標、拼接字符串、字符串聚合,動態SQL,寫文件等一些列操作完成需求,創建的存儲過程如下:CREATE DEFINER=`root`@`localhost` PROCEDURE `splitjh`()

BEGIN

declare done INT DEFAULT 0;

declare pyxbm char(2);

declare psxmc varchar(10);

declare pyxmc varchar(50);

declare pjhall int;

declare pjhrows TEXT;

declare yxjh cursor

for

select yxbm,yxmc,sum(jh) jhall from zzjh2019v a,sx b where a.sxbm=b.sxbm group by yxbm,yxmc order by yxbm;

declare CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

open yxjh;

fetch yxjh into pyxbm,pyxmc,pjhall;

while done !=1 do

select group_concat(jhrow separator '') into pjhrows from

(select concat('

',yxdh,'',yxmc,'在 ',b.sxmc,' 招生計劃如下',sum(jh),'',group_concat('',zydh,'',zymc,'(',bz,')',jh,'',xz,'',xl,'' order by zydh separator '')) jhrow

from zzjh2019v a,sx b where yxbm=pyxbm and a.sxbm=b.sxbm group by yxdh order by yxdh,zydh) jhs;

set @pfilename = concat('''d:/32/1/1/jh11',pyxbm,'.html''');

set @sql =concat('select concat(''

3+2計劃

代號專業及名稱備注人數學制學歷

prepare execsql from @sql;

execute execsql;

DEALLOCATE PREPARE execsql;

fetch yxjh into pyxbm,pyxmc,pjhall;

end while;

close yxjh;

END;

首先看效果,執行過程call splitjh();

在磁盤形成的HTML文件效果如下圖(數據有一定的敏感性,進行了遮擋處理):

文件展示頁面

生成的文件列表如下圖:

生成的文件列表

這里一共有87所學校,所以生成了87的文件,添加CSS樣式文件,讓表格呈現如前圖所示。

技術點

1)MySQL的游標,以及循環讀取游標的方法,涉及的語句如下:declare yxjh cursor

for

select yxbm,yxmc,sum(jh) jhall from zzjh2019v a,sx b where a.sxbm=b.sxbm group by yxbm,yxmc order by yxbm;#游標定義

declare CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;#游標循環條件,注意此句一定要定義在游標之后,才起作用

open yxjh;#打開游標

fetch yxjh into pyxbm,pyxmc,pjhall;#將游標行內容賦值給變量。

2)執行動態SQL,由于MySQL into outfile 后接的文件名不能為變量,所以必須使用動態SQL的方法,涉及的語句如下:prepare execsql from @sql;#從一個變量準備一個動態sql,注意execsql不用提前定義

execute execsql;#執行準備好的語句

DEALLOCATE PREPARE execsql;#銷毀語句

綜上就是使用MySQL數據庫,并借用MySQL寫文件的方式將數據從數據庫內按照需求導出文件,為何不用navicat導出呢?因為無法達到要求,又是聚合、又是格式,所以只能自己編寫過程通過SQL語句拼接字符串的方式來實現。沒有太多的技術難度,主要是想法和調試難度。后續在此基礎上又開發了以市縣為單位創建HTML文件,各招生學校作為分割的過程。本案例是實際需求催生出來的做法,在遇到這樣的需求前你是先想到SQL還是先想到開發工具呢?從實際效果看使用SQL這種方式更加靈活。這樣的SQL實現的字符串拼接是不是有點極限呢?

總結

以上是生活随笔為你收集整理的mysql 备份html数据_MySQL自动化生成HTML页面(导出数据)极限SQL编程-sql文件怎么打开...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。