我使用MySQL并拥有一个包含900万行的表,并希望快速检查是否存在记录(id)。
根据一些研究,似乎最快的方法是以下sql:
SELECT EXISTS(SELECT 1 FROM table1 WHERE id = 100)
来源:Best way to test if a row exists in a MySQL table
如何使用Laravel的查询构建器编写此内容?
答案 0 :(得分:5)
使用selectOne
类的Connection
方法:
$resultObj = DB::selectOne('select exists(select 1 from your_table where id=some_id) as `exists`');
$resultObj->exists; // 0 / 1;
答案 1 :(得分:3)
见http://laravel.com/docs/4.2/queries
向下滚动到Exists Statements,您将获得所需
DB::table('users')
->whereExists(function($query)
{
$query->select(DB::raw(1))
->from('table1')
->whereRaw("id = '100'");
})
->get();
答案 2 :(得分:2)
这是一个已经回答的旧问题,但我会发表我的意见 - 也许它会帮助有人在路上。
如mysql documentation所示,EXISTS仍将执行提供的子查询。当您需要将EXISTS作为更大查询的一部分时,使用EXISTS非常有用。但是,如果您只是想从Laravel应用程序检查记录是否存在,Eloquent提供了更简单的方法:
DB::table('table_name')->where('field_name', 'value')->exists();
这将执行类似
的查询select count(*) as aggregate from `table_name` where `field_name` = 'value' limit 1
// this is kinda the same as your subquery for EXISTS
并将评估结果并返回true / false,具体取决于记录是否存在。
对我而言,这种方式也比接受的答案更清晰,因为它不使用原始查询。
在laravel 5中,现在将执行相同的语句
select exists(select * from `table_name` where `field_name` = 'value')
究竟是什么,要求的是什么。