Laravel 5.1查询使用2个表

时间:2015-11-24 13:40:10

标签: mysql laravel-5

我有2个表:items和item_details。

项目:

id | name | shop_id

item_details:

id | item_id | price | delivery | ...

我需要获得价格最高的唯一名称的所有商品。 换句话说,我需要从表2中获取表1中每个唯一名称的最大价格值。

我尝试使用此查询,但它只返回1行:

$item_details = \DB::table('item_details')
->join('items', 'items.id', '=', 'item_details.item_id')
->where('item_details.price', \DB::raw("(select max(`price`) from item_details)"))
->groupBy('name')
->get();

当我使用$items = Item::all();$item_details = ItemDetails::all();

                     <tbody>
                        @if (isset($item_details) && count($item_details))
                        @foreach($item_details as $detail)
                        <tr>
                            <th scope="row" >{{ $detail->item->name}}</th>
                            <td>{{ $detail->price}}</td>
                            <td>{{ $detail->delivery}}
                        </tr>
                        @endforeach
                        @else
                        @endif  
                    </tbody>

我有重复的名字,但我需要每个名称价值最高的唯一名称。 有人知道如何让它变得更容易。

例如:

表1

id | name | shop_id
 1    aaa   1
 2    bbb   1
 3    ccc   2
 4    ddd   1
 5    eee   3

表2

id | item_id | price | delivery | ...
 1      1      100
 2      1      200
 3      2       50
 4      2      150
 5      3      200
 6      3      400
 7      3      700

结果应该是

name | price |
 aaa     200
 bbb     150
 ccc     700

1 个答案:

答案 0 :(得分:0)

我认为您的查询中的逻辑略有偏差。您的where子句仅表示返回价格最高的商品。您需要使用setLayoutDirection(View.LAYOUT_DIRECTION_RTL);来获取唯一值。

在原始mysql中,您的查询应该类似于 group by

修改

我认为你正在寻找这样的东西:

SELECT max(item_details.price), items.* FROM item_details left join items on item_details.item_id = items.id group by items.name;