Mysql
 sql >> Database >  >> RDS >> Mysql

COALESCE in laravel

Bene, l'OP non è stato molto utile, ma ci proverò! Presumo che i votes la tabella contiene i voti effettivi espressi dagli utenti sugli articoli. Ciò significa che se un articolo non ha ricevuto alcun voto, allora quell'ID articolo (masterItemId ) non esiste nei votes tabella.

Ciò significa che la tabella dei voti deve essere lasciata unita alla tabella delle voci principali su masterItemId campo. Chiamerò la tabella degli elementi principali:items e supponiamo che abbia un itemId campo che corrisponde a masterItemId campo nel votes tavolo. In termini 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

Non ho familiarità con Laravel, ma avrai bisogno di qualcosa del genere, tuttavia non trattare è come codice copia-incolla:

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