我有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
答案 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;