根据表数据有条件地执行SQ​​L查询/语句

时间:2016-06-30 09:52:13

标签: php sql sql-server laravel sql-server-2005

首先,看看这个表,基本上我需要UPDATE(+1)一个票据,其中Username等于Jondoe和Money大于200。

enter image description here

现在,我知道我可以执行3个查询,首先检查实际用户是否将Jondoe作为用户名,然后检查他是否有足够的资金,如果这些结果为真,则最后更新(+1)一张票。 / p>

我正在学习SQL而且我正在使用mssql数据库,这种条件查询/更新的正确方法是什么?我可以避免使用那么多查询吗?

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

提前致谢

5 个答案:

答案 0 :(得分:2)

您正在寻找的是使用UPDATE语句和WHERE语句来设置您需要的内容,这就是您的操作方法。通过laravel解析命令,它会相应更新。

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

答案 1 :(得分:2)

使用Eloquent:

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

答案 2 :(得分:2)

我不是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之间的同一行中获取一些资金,然后以负资金结束,并允许您不应该进行操作。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

尝试此命令

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

希望这可以解决您的问题