Cóż, OP nie był zbyt pomocny, ale dam mu szansę! Zakładam, że votes
tabela zawiera rzeczywiste głosy oddane przez użytkowników na elementy. Oznacza to, że jeśli przedmiot nie otrzymał żadnego głosu, to jego identyfikator (masterItemId
) nie istnieje w votes
tabela.
Oznacza to, że tabela głosów musi pozostać połączona z główną tabelą elementów na masterItemId
pole. Wywołam główną tabelę przedmiotów:items
i załóżmy, że ma itemId
pole pasujące do masterItemId
pole w votes
stół. W kategoriach SQL:
select items.itemId, ifnull(sum(votes.votes),0) as votesSum
from items left join votes on items.itemId=votes.masterItemId
where votes.voteDate between ... and ... and <other conditions>
group by items.itemId
Nie znam Laravela, ale będziesz potrzebować czegoś takiego, jednak nie traktuj tego jako kodu kopiuj-wklej:
$multipleitems = DB::table('items')
->leftJoin('votes','items.itemId','=','votes.masterItemId')
->select('items.itemId',DB::raw('ifnull(sum(votes.votes),0) as voteSum'))
->whereBetween('votes.voteDate',array($startDate,$endDate))
->where($condition)
->groupBy('items.temId')
->get();