我正在尝试将此sql转换为php laravel 5.1查询。
SELECT `videoId`, `videoTitle`FROM `tempdetails` WHERE `videoTitle` LIKE '%Ramsays Kitchen Nightmares%'
or videoTitle in
(
videoTitle in
(`videoTitle` LIKE '%season 1%' or `videoTitle` LIKE '%e01%' or `videoTitle` LIKE '%01x%')
or
videoTitle in
(`videoTitle` LIKE '%episode 1%' or `videoTitle` LIKE '%s01%' or `videoTitle` LIKE '%x01%')
)
这是我尝试的代码。
$vd = DB::table('tempdetails');
$vd ->where('videoTitle', 'like', '%'.$titl.'%')
->whereIn('videoTitle',function($query) {
$query->orwhere( 'videoTitle', 'like', '%season 1%')
->orWhere( 'videoTitle', 'like', '%s01%')
->orWhere( 'videoTitle', 'like', '%01x%');
});
$vd->whereIn('videoTitle',function($query) {
$query->orWhere( 'videoTitle', 'like', '%episode 1%')
->orWhere( 'videoTitle', 'like', '%e01%')
->orWhere( 'videoTitle', 'like', '%x01%');
});
$vd->get();
但这给我一个错误:
SQLSTATE [HY000]:常规错误:1096未使用表(SQL:选择*
来自
tempdetails
,其中videoTitle
就像%Ramsay的厨房噩梦%和
videoTitle
in(选择*,其中videoTitle
喜欢%season 1%或
videoTitle
如%s01%或videoTitle
如%01x%)和videoTitle
in(选择*,其中videoTitle
如%episode 1%或videoTitle
如%e01%或videoTitle
如%x01%))任何人都有一个想法如何实现这一目标?
最佳答案
您可以使用whereRaw
或DB::select()
。当我有无法直观翻译的复杂语句时,除非我真的很需要口才,否则我倾向于运行原始语句。
另外,我不确定您的数据是什么样子以及要达到的目标,但是可能有一种方法可以重写查询,以便更好地应对雄辩的约束。whereRaw()
的示例
$wherelikes = "videoTitle in
(
videoTitle in
(`videoTitle` LIKE '%season 1%' or `videoTitle` LIKE '%e01%' or `videoTitle` LIKE '%01x%')
or
videoTitle in
(`videoTitle` LIKE '%episode 1%' or `videoTitle` LIKE '%s01%' or `videoTitle` LIKE '%x01%')
)"
$vd = DB::table('tempdetails')
->whereRaw("`videoTitle` LIKE '%Ramsays Kitchen Nightmares%'")
->orWhere(function($query) use ($whereLikes) {
$query->whereRaw($whereLikes)
})->get();
DB::select()
的示例$statement = "SELECT `videoId`, `videoTitle`FROM `tempdetails` WHERE `videoTitle` LIKE '%Ramsays Kitchen Nightmares%'
or videoTitle in
(
videoTitle in
(`videoTitle` LIKE '%season 1%' or `videoTitle` LIKE '%e01%' or `videoTitle` LIKE '%01x%')
or
videoTitle in
(`videoTitle` LIKE '%episode 1%' or `videoTitle` LIKE '%s01%' or `videoTitle` LIKE '%x01%')
)"
$vd = DB::select(DB::raw($statement));
关于php - Laravel 5.1查询构建器,带有带有多个嵌套或查询的“in”子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35737637/