#php #mysql #laravel
#php #mysql #laravel
Вопрос:
Моя цель
Я хочу группировать заказы по их «type_id» и вычислять сумму «volume_remain» для каждой группы заказов. Я ищу запрос для этого. Возможно, стоит упомянуть, что моя таблица заказов содержит около 200 000 строк.
Я работаю с фреймворком Laravel (5.8), и у меня нет опыта работы с запросами, которые не имеют очень простого характера. Из-за недостатка опыта я мало что пробовал.
Вот как создается моя таблица заказов.
Schema::create('orders', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('type_id')->index();
$table->bigInteger('order_id')->index();
$table->integer('duration');
$table->string('is_buy_order');
$table->string('issued');
$table->integer('location_id');
$table->integer('min_volume');
$table->bigInteger('price');
$table->string('range');
$table->integer('system_id');
$table->integer('volume_remain');
$table->integer('volume_total');
$table->timestamps();
});
type_id: представляет элемент в игре
заказ: представляет 1 заказ на определенный товар на игровом рынке
volume_remain: объем элементов этого конкретного порядка, которые все еще находятся на рынке
Таким образом, каждый заказ принадлежит type_id, а type_id может иметь много заказов.
Желаемый результат
Моим желаемым результатом будет набор заказов, сгруппированных по их type_id, но только те заказы, которые не превышают определенную сумму их volume_remain.
Ответ №1:
Вы можете запросить что-то вроде этого
DB::table("orders")->select("id", "type_id", "order_id", "duration",
"is_buy_order", "issued", "location_id", "min_volume", "price", "range",
"system_id", DB::raw("SUM(volume_remain) vr"))->groupBy("type_id")
->havingRaw("vr <= ?",['specific sum']);
specific sum
— будет той суммой, на которую она не будет превышать. Замените его соответствующей суммой.