Sign in

取得Query後結果

情境:在Insert資料後,取得id(auto_increasement)的值。

Postgresql與MariaDB語法

INSERT INTO table (column1, column2, column3)
VALUES (value1, value2, value3) RETURNING id

MySQL語法

INSERT INTO table (column1, column2, column3)
VALUES (value1, value2, value3);
select LAST_INSERT_ID();

參考資料:

PostgreSQL function for last inserted ID - stackoverflow

Returning Data From Modified Rows - PostgreSQL

INSERT…RETURNING - MariaDB

Information Functions - MySQL


_cat相關指令

_cat/master?v

取得主節點相關資訊

_cat/nodes?v

取得所有節點資訊


客串開發C#.Net

假設Controller用Create接收傳入值

假設Create物件含有下列屬性


批次匯入json檔

curl -H “Content-Type: application/json” -XPOST “localhost:9200/{索引名稱}/_doc/_bulk?pretty&refresh” --data-binary “@{檔案名稱}”

查詢索引狀態(GET _cat/indices?v)


啟動elasticsearch

單一節點

./bin/elasticsearch -d -p pid
-d 在背景執行
-p 產出process ID檔案

確認成功執行

curl -XGET “http://localhost:9200/

叢集

./bin/elasticsearch -E cluster.name=叢及名稱 -E node.name=節點名稱 -E path.data=資料路徑

確認節點建立

curl -XGET “http://localhost:9200/_cat/nodes?v"


EXPLAIN 檢視分析SQL語句

a表沒有建立任何索引

EXPLAIN結果


Laravel內建的使用者相關功能

預設會設定登入、登出、註冊、重設密碼、密碼確認、email驗證的路由。

在Auth::routes();帶入陣列設定,可以選擇性開啟路由(註冊、email驗證、確認密碼與重設密碼)


只顯示按鈕,按鈕觸發click事件之後,再觸發input click

HTML部分

<input type="file" id="importFile" style="display: none" ><button id="importButton" class="btn btn-success float-right"> 匯入資料</button>

JS部分

$("#importBtn").click(function(){
$('#importFile').trigger('click');
});
$('#importFile').change(function(){
let formData = new FormData();
formData.append('import_file', this.files[0]);
$.ajax({
url: "{{route('sys.athletes.import')}}",
method: 'POST',
processData: false,
contentType: false,
data: formData,
})
.done(function(data, textStatus, jqXHR){
if(data.status !== 'success'){
alert(data.message);
}
dataGrid.refresh(true);
})
.fail(function(jqXHR, textStatus, errorThrown ) {
console.log("status:"+textStatus+" err:"+ errorThrown);
alert("匯入失敗");
})
.always(function(){
//在done與fail之後執行
});
});

參考 jQuery官方MDN


個人實際應用想法

依據官方說明

Route::resource(“route name”, “controller class name”)

會創建index, create, store, show, edit, update, destroy路由名稱。

Route::apiResource(“route name”, “controller class name”)

會排除create和edit,只創建index, show, store, update, destroy路由名稱。

我的使用情境,前端畫面目前使用DevExpress,需求(action):進入頁(index)、載入所有資料(create)、新增畫面(不須路由)、新增api(store)、修改畫面(不須路由)、修改api(update)。

//完全符合需求的寫法
Route::apiResource(“route name”, “controller class name”, [“except” =>["show", "destroy"], ["only" => "create"]])
//我選擇這種寫法,覺得比較簡潔易懂些
Route::resource(“route name”, “controller class name”)->only( ['index', 'create','store','update'])

除了覺得簡潔之外,看apiResource把only和except條件進行整理後,也使用resource。


CURD細部小東西

CASE WHEN

當條件成立回傳指定內容

情境:改變使用者狀態(is_locked,0正常1封鎖)
UPDATE `users`
SET is_locked =(
CASE
WHEN is_locked = 1
THEN 0
ELSE 1
END
)
WHERE id=?"
IF寫法UPDATE `users` SET is_locked = IF(is_locked = 0,1,0) WHERE id=?

GROUP_CONCAT

使用 GROUP BY或JOIN 資料表沒有呈現所有符合條件的資料的欄位內容時,搭配 GROUP_CONCAT() 即可將多筆查詢結果內容串接合併為一筆

未使用GROUP_CONCACT

SELECT name FROM game_record 
WHERE game_year = 2020
AND game = ‘XXX’
AND ranking = 1
未使用GROUP_CONCACT執行結果

使用GROUP_CONCACT

SELECT GROUP_CONCAT(name)FROM game_record 
WHERE game_year = 2020
AND game = ‘XXX’
AND ranking = 1

yanweilun

網站工程師

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store