我正在尝试将此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%))


任何人都有一个想法如何实现这一目标?

最佳答案

您可以使用whereRawDB::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/

10-16 06:42