Mysql
 sql >> Base de données >  >> RDS >> Mysql

COALESCE à laravel

Eh bien, l'OP n'a pas été trop utile, mais je vais tenter le coup ! Je suppose que les votes table contient les votes réels exprimés par les utilisateurs sur les éléments. Cela signifie que si un élément n'a reçu aucun vote, alors cet identifiant d'élément (masterItemId ) n'existe pas dans les votes tableau.

Cela signifie que la table des votes doit être laissée jointe sur la table des éléments principaux sur le masterItemId domaine. J'appellerai la table des éléments principaux :items , et supposons qu'il a un itemId champ qui correspond à masterItemId dans le champ votes table. En termes 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

Je ne connais pas Laravel, mais vous aurez besoin de quelque chose comme ça, mais ne le traitez pas comme du code copier-coller :

$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();