【问题标题】:Laravel running Select Exists queriesLaravel 运行 Select Exists 查询
【发布时间】:2016-11-01 10:58:29
【问题描述】:

我有一个这样的查询:

    $query = "Select EXISTS(SELECT * FROM grp_user AS pivot JOIN groups
AS g ON pivot.grp_id = g.id JOIN vote ON g.id = vote.grp_id WHERE 
pivot.grp_id = :grp_id AND pivot.user_id = :user_id)";

我想运行它。所以我尝试了:

$res = DB::select($query,array("grp_id"=>250,"user_id"=>1));

res 理想情况下应该有一个布尔值,但它有一个类似的数组:

[{"EXISTS(SELECT * FROM grp_user AS pivot JOIN groups AS g ON pivot.grp_id = g.id JOIN vote ON g.id = vote.grp_id WHERE pivot.grp_id = ? AND pivot.user_id = ?)":1}]

注意最后的 1,这是我感兴趣的值(它的 1 或 0)。

我怎样才能完成这项工作,或者以“laravel”的方式实现这一点?

【问题讨论】:

  • 它还是Builder 对象吗? dd($res) 的结果是什么?您是否尝试在$res = DB::select(); 末尾添加->first()->get()
  • 它是一个数组。当我附加 ->get() 时,我收到错误调用数组上的成员函数 get()
  • 为什么不只是SELECT COUNT(*) FROM grp_user AS pivot JOIN groups AS g ON pivot.grp_id = g.id JOIN vote ON g.id = vote.grp_id WHERE pivot.grp_id = :grp_id AND pivot.user_id = :user_id
  • 在这个答案中:stackoverflow.com/questions/1676551/…,选择存在是最快的。我提到的这个查询将被称为非常高的次数或次数(它是一种在群消息系统中授权用户的方式),所以我想要尽可能多的性能

标签: php mysql laravel fluent


【解决方案1】:

为什么不检查它是否为空:

$query = "Select * FROM grp_user AS pivot JOIN groups
AS g ON pivot.grp_id = g.id JOIN vote ON g.id = vote.grp_id WHERE 
pivot.grp_id = :grp_id AND pivot.user_id = :user_id LIMIT 1";

$res = DB::select($query,array("grp_id"=>250,"user_id"=>1));

return (count($res) > 0) ? 1 : 0;

【讨论】:

  • $res = DB::select($query,array("grp_id"=>250,"user_id"=>1))->get();抛出错误调用数组上的成员函数 get()
  • 如前所述,我想使用 select 存在。使用它的另一个优点是,它会尝试使用覆盖索引,如果有的话
  • 你试过用 DB::statement 代替 DB::select 吗?
  • 它只返回真假。如果语句正确执行,则为 true。它不返回语句的实际值
猜你喜欢
  • 2023-02-11
  • 2012-12-24
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多