我正在使用預約系統。我想知道有多少時間段可用以及有多少時間段已經預訂。時隙計數將根據預約而改變。我使用 laravel 開發這個系統。我使用 Appointment 模型和 Time Model 來存盤該資料。
Appointments table =>id,user_id,date,status
Time table => id,appointment_id,status(0,1)
如果有些人將時隙狀態更新分配為 1(默認為 0)。我想預約串列,其中包含預約 ID、日期和已預訂的時間段以及每個預約仍有多少可用時間段(根據狀態獲取單獨的時間段計數)。我嘗試按照代碼存檔此任務。
$appointments = DB::table('appointments')
->join('times', 'times.appointment_id', '=', 'appointments.id')
->where('appointments.status',0)
->where('times.status',0)
->selectRaw("appointments.id,appointments.date, COUNT('times.status') as status_count")
->groupBy('appointments.id','appointments.date')
->orderBy('appointments.id', 'asc')
->get();
但它只能獲得狀態 0 計數。如何使用單個查詢將狀態 1 計為單獨的列?
uj5u.com熱心網友回復:
嘗試遵循代碼。這是實際的 SQL 代碼。您必須根據 Laravel 查詢構建器方法優化此代碼
$appointments = DB::select('select
appointments.id,appointments.date,
sum(case when times.status = 0 then 1 else 0 end) as available,
sum(case when times.status = 1 then 1 else 0 end) as booked
from
appointments
INNER JOIN times
ON appointments.id = times.appointment_id
WHERE appointments.status = 0
group by
appointments.id,appointments.date;');
uj5u.com熱心網友回復:
您可以將case與sum運算子一起用于條件計數:
SELECT
SUM(CASE WHEN 'times.status' = 0 THEN 1 ELSE 0 END) as inactive_count,
SUM(CASE WHEN 'times.status' = 1 THEN 1 ELSE 0 END) as active_count
FROM ...
對于 ,active_count也可以簡單地將總和應用于列本身(因為它們已經是 1 ):SUM('times.status')
您現在可以簡單地將此邏輯應用于 laravel-query
編輯:有關高級示例,請參閱此帖子:https ://stackoverflow.com/a/1288130/11028838
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/514644.html
