我想把这个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:select * 来自
tempdetails
,其中videoTitle
喜欢%Ramsay的厨房 梦魇%和videoTitle
in(选择*videoTitle
喜欢 %季节1%或videoTitle
喜欢%s01%或videoTitle
喜欢%01x%)和videoTitle
in(select * wherevideoTitle
喜欢%episode 1%或videoTitle
例如%e01%或videoTitle
例如%x01%))
任何人都知道如何实现这个目标?
答案 0 :(得分:0)
您可以使用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));