mysql多行查询

kkbh8khc  于 2021-06-25  发布在  Mysql
关注(0)|答案(0)|浏览(223)

我创建了一个项目 laravel 5.4 以及 mysql 5.7 数据库。我在这个项目中有两个角色,分别是driver和customer。
在我的项目中,一个驱动程序可以选择多个技能,并为每个技能添加多个标记,而客户可以注册一个包含多个项目的订单。为了获得物品,每个物品可以绑定到一个技能和多个标签
注意:用户 skill_id 有四个部分 Group - Category - Subcategory - Item 每一部分 skill_id 举例说明技能等级 G1-C2-S3 因为用户刚刚选择了三个级别,所以表示用户选择了该级别的所有项目
另一个例子是技能id G5-C5-S2-T7 在这个技能中,用户刚刚选择了group5的category5的subcategory2的item7
注意:用户 skill_id 水平部件不固定
用户技能表如下:

skill_id      user_id
 ________________________
  G1-C2-S3       2
  G2-C4          2
  G5-C5-S2-T7    2

用户技能标签表

skill_id      user_id    tag
 _______________________________
  G1-C2-S3       2         nice
  G1-C2-S3       2         good
  G1-C2-S3       2          bad
  G2-C4          2          xxx
  G2-C4          2          yyy
  G5-C5-S2-T7    2          zz
  G5-C5-S2-T7    2          jjj

订单表为:

id      title     
 ________________
  3      egergr    
  3      ergervv     
  3      ergerger

订单项目表为:

item_id      order_id      tags
 __________________________________
  G1-C2-S3-t2       3         nice
  G2-C4-S6-t3       3          yyy
  G5-C5-S2-T7       3          zz

注意:按注册顺序排列的用户可以为每个项目选择最后一级技能\u id item_id 永远是技能的4部分,它是固定的
如何编写一个查询,将客户订单绑定到具有匹配技能的驱动程序,并将其标记绑定到订单项目和其标记?
我写了下面的代码,但不工作

$skills = UsersSkills::with('tags')->where('user_id',$biker_id)->get();

    $revisions = function ($query) use($skills) 
    {
        foreach($skills as $skill)
        {

            $tags = ($skills[0]['tags']->toArray() !== []) ? $skills[0]['tags']->toArray() : null;
            $tags_values = (!is_null($tags)) ? array_column($tags, 'tag') : null;
            $query->where('item_id','LIKE',$skills[0]['skill_id'].'%')->whereIn('tags',$tags_values);
        }
    };

    $orders = Order::whereHas('order_items', $revisions)->where(function($query) use($maxLat,$minLat,$maxLon,$minLon,$biker_search_time,$estimation_id) {

        $query->where('done_by_expert',1);
        $query->whereBetween('destination_longitude', [$minLon, $maxLon]);
        $query->whereBetween('destination_latitude',[$minLat,$maxLat]);
        $query->where('status','=','pending');
        $query->where('type','=',NULL);
        $query->where('vehicle_type_id',$estimation_id);
        $query->whereNull('favorites');
        $query->where('created_at','>=',Carbon::now()->subMinute($biker_search_time));

    })->get();

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题