簡體   English   中英

根據表數據有條件地執行SQ​​L查詢/語句

[英]Execute a SQL query/statement conditionally based on table data

首先,看看這個表,基本上我需要UPDATE(+1)一個票據,其中Username等於Jondoe和Money大於200。

在此輸入圖像描述

現在,我知道我可以執行3個查詢,首先檢查實際用戶是否將Jondoe作為用戶名,然后檢查他是否有足夠的資金,如果這些結果為真,則最后更新(+1)一張票。

我正在學習SQL,而且我正在研究一個mssql數據庫,這種條件查詢/更新的正確方法是什么? 我可以避免使用那么多查詢嗎?

我也在使用laravel框架,我不知道它是否帶有任何“工具”來完成我想要的東西。

提前致謝

您正在尋找的是使用UPDATE語句和WHERE語句來設置您需要的內容,這就是您的操作方法。 通過laravel解析命令,它將相應更新。

UPDATE TableName Set Tickets=Tickets+1 WHERE USERNAME='JonDoe' AND Money > 200

使用Eloquent:

\App\User::where('username','JonDoe')->where('Money','>',200)->increment('Tickets');

我不是Laravel的專家,但是和其他許多框架一樣,它應該有一個ORM系統(對象關系映射: https ://en.wikipedia.org/wiki/Object-relational_mapping),這個系統可以幫助你“說話”以面向對象的方式使用數據庫(使用getFirstByPrimaryKey($ primaryKey)等方法)。

這就是說,我認為當你已經知道如何手動完成時,那種系統會更好。

在你提議的情況下,你必須首先考慮你需要什么,然后想想實現它的更好方法是什么。

你需要什么:

如果該用戶具有更多或等於某個數量,則為一個用戶插入故障單。

讓我想一想,也許你會在成功創建門票之后從金錢領域中取出這筆數量,對吧?

所以我認為我們正在賣票,正常的步驟應該是:

  • 檢查用戶是否已登錄。 如果已記錄,我們可能在會話或類似系統中具有用戶ID。 如果可能的話,在索引數字字段中搜索要好得多。

  • 獲得user_id后,如果該用戶ID有足夠的資金用於此操作,我們會更新該行:

//pseudo code
        $userId = 12;
        $cost = 200;
        $query = "update ticketstable set tickets=tickets+1, money=money-$cost 
    where id='$userId' and money >= $cost";
        $result = $db->query($query);

        if($result){
          //row with id = $userId has been updated
        }else{
          //There's not a row with $userId, or that row's money was less than $cost
        }

在處理貨幣操作時考慮到你應該將所有相關查詢作為一個交易(數據庫中的事務argot意味着一起執行幾個sql語句,如果一些失敗,所有其他的都被還原,以避免不一致)。

如果您在兩個查詢中划分我的提案:

1)檢查id = x的用戶是否有錢> = $ cost;

2)更新資金 - = $ cost;

您可以在用戶或其他自動化流程從步驟1和步驟2之間的同一行中獲取一些資金的情況下找到,然后以負資金結束,並允許您不應該進行操作。

Laravel有一個流暢的查詢構建器,您可以使用(或多或少)如下所示:

$affectedRows = DB::table('TableName')
    ->where("Username", "Jondoe")
    ->where("Money",">",200)
    ->increment("Tickets");

您還可以使用$affectedRows來檢查是否有任何更新。

編輯:

如果您有一個用戶模型(例如,名為User ),那么您可以使用相同的語法,但使用Eloquent。

例:

User::where("Username", "Jondoe")
    ->where("Money",">",200)
    ->increment("Tickets");

Eloquent是Laravel的ORM(對象關系模型),它提供了關系數據庫和PHP對象(即MVC框架的模型部分)之間的映射。 它不是一個查詢構建器本身,但它確實使用流暢的后台來構建查詢。

參考https://laravel.com/docs/5.0/queries

試試這個命令

UPDATE TableName Set Tickets=Tickets+1 WHERE USERNAME='JonDoe' AND Money > 200

希望這將解決您的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM