使用laravel sql查询生成器从选择的记录中排除2101条以上的记录

gr8qqesn  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(241)

我用的是这样的东西:

$scanned = DB::table("Persons")
        ->whereNotIn("Person_Id", $exclude)
        ->get();

问题是$exclude的记录超过2101条,我得到以下错误:

SQLSTATE[IMSSP]: Tried to bind parameter number 2101.  SQL Server supports a maximum of 2100 parameters.

有什么办法吗,我怎么解决这个问题?

b4wnujal

b4wnujal1#

假设以下表格为例。

TABLE persons
  id
  name

TABLE tags
  id
  person_id
  tag

假设我想要的人没有特定的标签,我可以这样做:

$exclude = DB::table('tags')->where('tag', 'some_tag')->pluck('person_id');

然后

DB::table('persons')->whereNotIn($exclude)->get();

如果有很多数据,上面的代码可能会有同样的问题。相反,我会把它作为一个连接。

$scanned = DB::table('persons')->join('tags')->where('tag', '!=', 'some_tag')->distinct('persons.id')->get();

相关问题