域名證書在哪下載?域名證書由注冊商自行頒發,以確認域名歸屬權限。所以,你的域名是在哪個服務商處注冊的,就去哪個網站下載,比如阿里云、西部數碼、新網等等。
一般情況下,服務商都會提供域名證書在線查詢及下載服務,你在哪個平臺購買的域名,就去對應的購買網站查詢。
域名證書是以電子證書的格式,標明了注冊域名、注冊所有人的中文和英文名稱、注冊成功的時間和域名注冊到期時間等內容,確定域名注冊者對域名的擁有權以及擁有時限。
域名證書只是一個網絡文件,其作用是證明域名所有權,不具有法律效力,對域名的保護作用十分有限。用戶要想保護域名,關鍵還要保護好域名賬戶安全,特別是注冊郵箱的安全。
接入國內主機的網站上線都要進行ICP備案,如果備案提交的域名超過一定數量,部分地區管局就會要求提供域名證書。
如果網站備案時需要提供域名證書,可以聯系域名注冊機構咨詢獲取。如果是在西部數碼購買的域名,登陸會員管理中心,在業務管理-域名管理中即可找到對應域名,點獲取證書可以查看證書文件,支持截圖保存和打印。
西部數碼是ICANN及CNNIC雙重認證的的頂級域名注冊服務商,提供域名查詢、注冊、解析、管理、交易、行情等一站式服務,為用戶域名安全和售后提供專業保障,域名注冊鏈接
記一個mysql排序功能的實現過程
原文鏈接:
最近在項目中遇到一個比較有難度的sql,關于排序的,實現后還是覺得蠻有記錄價值,所以便有了這篇博客。
需求
原始的排序需求是這樣的,首先根據狀態排序(進行中-未開始-已完賽),其次根據比賽時間排序,當狀態為已完成時根據比賽時間倒序,狀態為其他時根據比賽時間正序,其他規則不涉及這里的技術,就不詳細說明了
分析:對于一階排序,原有比賽狀態存在多個狀態為為進行中,且狀態值的定義并不符合需求定義的方式進行升序或者倒序,這里排序就要用到order by case when 這種形式。同樣的二階排序涉及到根據不同狀態進行時間正序和倒序,也可以使用order by case when進行排序,當然,在實現中遇到了各種問題,下面會一一講解。
實現過程
根據上面的分析,我寫出了我的初代排序sql如下(涉及公司表結構等內容對sql做了簡化處理)
SELECT
d.team1,
d.team2,
d.team1_score,
d.team2_score
FROM
demo d
ORDER BY
CASE
WHEN d.demo_status = 1 THEN
8
WHEN d.demo_status IN ( 2, 3, 4 ) THEN
7
ELSE d.demo_status END,
CASE
WHEN d.demo_status = 9 THEN
d.demo_time DESC
ELSE d.demo_time END
以上sql在執行過程中是會報錯的,原因就在于 case when結構內部不能使用mysql關鍵字,其原理就是將狀態值進行轉化后排序,所以只能是具體的值。于是,我作了轉換,將比賽時間轉化為時間戳,想要倒序的時候就根據當前時間和比賽時間的時間戳差值進行排序,這樣就相當于把正序轉化為了倒序,優化后的sql如下
SELECT
d.team1,
d.team2,
d.team1_score,
d.team2_score
FROM
demo d
ORDER BY
CASE
WHEN d.demo_status = 1 THEN
8
WHEN d.demo_status IN ( 2, 3, 4 ) THEN
7
ELSE d.demo_status END,
CASE
WHEN d.demo_status = 9 THEN
(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP( d.demo_time ))
ELSE d.demo_time END
以上sql在執行后會發現,一階排序是正常的,二階排序會出現混亂,出現混亂的原因就是狀態為9時根據時間差(數值)排序,非9時根據時間(時間戳)進行排序,時間差和時間戳的值范圍和單位是不同的,所以這里我們就要統一排序依據,確保每個case語句分支返回的是相同類型的值,優化后的sql如下
SELECT
d.team1,
d.team2,
d.team1_score,
d.team2_score
FROM
demo d
ORDER BY
CASE
WHEN d.demo_status = 1 THEN
8
WHEN d.demo_status IN ( 2, 3, 4 ) THEN
7
ELSE d.demo_status END,
CASE
WHEN d.demo_status = 9 THEN
(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP( d.demo_time ))
ELSE UNIX_TIMESTAMP( d.demo_time ) END
其實到了此處,sql已經是基本正確的了,為什么是基本正確呢?因為有一個細節大家注意到沒有,select的字段里沒有表的主鍵,筆者這里因為實際用到的時候是關聯查詢,主表的主鍵id是不需要的,所以就沒有返回,在這里其實就埋藏著一個坑點,因為大家在寫sql的時候,很多情況都是有分頁的,而mysql的分頁邏輯里,是有根據排序規則去取相應索引和條數的數據的,當sql的排序規則進行排序無法判定先后順序時,它會根據select中主表的id進行排序,這樣每次分頁都能取到不同的數據,而此處select的字段里沒有將主表id查詢出來,也就沒有最后這段id排序,導致的后果就是前一頁出現的數據,在這一頁也可能會出現,這種重復出現是概率性的,有時候是這條數據,有時候是那條數據,有時候又不會重復,這樣肯定是不行的,最終再對sql進行修改,最終版如下
SELECT
d.id,
d.team1,
d.team2,
d.team1_score,
d.team2_score
FROM
demo d
ORDER BY
CASE
WHEN d.demo_status = 1 THEN
8
WHEN d.demo_status IN ( 2, 3, 4 ) THEN
7
ELSE d.demo_status END,
CASE
WHEN d.demo_status = 9 THEN
(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP( d.demo_time ))
ELSE UNIX_TIMESTAMP( d.demo_time ) END
d.id雖然不用,但在sql中依然需要查出來,當然也可以在末尾加一個主鍵id排序,這樣就是一個正確的sql了
order by case when除了以上用法,還能把字段提出來放在case后面when后面跟具體值,因為這里涉及到多個狀態合并為一個狀態,所以寫法上稍微有些不同,但都是可行的。
總結
其實也沒啥好總結的,寫代碼本身就不是一件一帆風順的事情,有些時候受限于眼界或者其他因素,不能一次性寫出完美的代碼(雷總除外,雷總代碼如shi一般優雅),所以就需要我們不斷去嘗試,不斷去找到問題的突破口,通過各種途徑去補全我們的知識庫,去完善我們的代碼。也許多年后再回頭看,那不正是我們的來時路,這也正是我創建這個博客網站的初衷,路漫漫其修遠兮,吾將上下而求索。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。