如何在连接表(laravel)中获得最低价格

时间:2017-07-03 03:37:22

标签: php mysql laravel eloquent

这是我的代码:

             return self::join('item_tags','tags.id', '=','item_tags.tags_id')
            ->join('items','items.id', '=','item_tags.items_id')
            ->join('item_images','item_tags.items_id','=','item_images.items_id')
            ->join('item_sellers','item_sellers.items_id','=','items.id')
            ->orderBy('item_sellers.price','asc')
            ->groupBy('item_sellers.items_id')
            ->paginate($paginate);

项目表

items

item_sellers表 here is the image of the data on my database

我得到1466.00的价格而不是1400.00的价格,任何人都可以帮我解决这个问题吗?三江源

PS:我需要为每个items_id获得最低价格。

3 个答案:

答案 0 :(得分:0)

这是由groupBy('item_sellers.items_id')引起的。您需要添加select子句。

return self::join('item_tags','tags.id', '=','item_tags.tags_id')
        ->join('items','items.id', '=','item_tags.items_id')
        ->join('item_images','item_tags.items_id','=','item_images.items_id')
        ->join('item_sellers','item_sellers.items_id','=','items.id') 
        ->select(DB:raw('field1, field2, min(price) as price'))
        ->groupBy('item_sellers.items_id')
        ->paginate($paginate);

或者

return self::join('item_tags','tags.id', '=','item_tags.tags_id')
        ->join('items','items.id', '=','item_tags.items_id')
        ->join('item_images','item_tags.items_id','=','item_images.items_id')
        ->join('item_sellers','item_sellers.items_id','=','items.id') 
        ->groupBy('item_sellers.items_id')
        ->orderBy('item_sellers.price','asc')
        ->paginate($paginate);

答案 1 :(得分:0)

return self::select("item_sellers.item_id",\DB::raw("min(item_sellers.price) as min_selll_price"))join('item_tags','tags.id', '=','item_tags.tags_id')
        ->join('items','items.id', '=','item_tags.items_id')
        ->join('item_images','item_tags.items_id','=','item_images.items_id')
        ->join('item_sellers','item_sellers.items_id','=','items.id')
        ->orderByRaw("min(item_sellers.price)",'ASC')
        ->groupBy('item_sellers.items_id')
        ->paginate($paginate);

答案 2 :(得分:0)

我认为你需要尝试这个:

return self::select("item_sellers.id","item.name","item_sellers.price")
        ->join('item_tags','tags.id', '=','item_tags.tags_id')
        ->join('items','items.id', '=','item_tags.items_id')
        ->join('item_images','item_tags.items_id','=','item_images.items_id')
        ->join('item_sellers','item_sellers.items_id','=','items.id')
        ->orderBy("item_sellers.price",'ASC')
        ->orderBy("item_sellers.id",'ASC')
        ->paginate($paginate);

希望对你有所帮助!