Mysql
 sql >> Datenbank >  >> RDS >> Mysql

COALESCE in Laravel

Nun, das OP war nicht allzu hilfreich, aber ich werde es versuchen! Ich gehe davon aus, dass der votes Tabelle enthält tatsächliche Stimmen, die von Benutzern zu den Elementen abgegeben wurden. Das bedeutet, wenn ein Artikel keine Bewertung erhalten hat, dann wird diese Artikel-ID (masterItemId ) existiert nicht in den votes Tabelle.

Das bedeutet, dass die Abstimmungstabelle auf der Hauptartikeltabelle auf der masterItemId verbunden bleiben muss Feld. Ich nenne die Hauptartikeltabelle:items , und nehmen Sie an, dass es eine itemId hat Feld, das mit masterItemId übereinstimmt Feld in den votes Tisch. In SQL-Begriffen:

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

Ich bin mit Laravel nicht vertraut, aber Sie werden so etwas brauchen, aber behandeln Sie es nicht als Copy-Paste-Code:

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