2017-09-18 2 views
1

lorsque vous essayez faire une sélection multipledoctrine Dbal obtenir le dernier message de chat par groupe

$result = $this->qb->select('c.id','c.message','acc.name as chat_from', 'c.chat_to as count') 
    ->addSelect("SELECT * FROM chat ORDER BY date_deliver DESC") 
     ->from($this->table,'c') 
     ->join('c','account','acc', 'c.chat_from = acc.id') 
     ->orderBy('date_sent','DESC') 
     ->groupby('chat_from') 
     ->where('chat_to ='.$id) 
     ->execute(); 
     return $result->fetchAll(); 

J'ai aussi essayé

$result = $this->qb->select('c.id','c.message','acc.name as chat_from', 'c.chat_to as count') 
     ->from("SELECT * FROM chat ORDER BY date_deliver DESC",'c') 
     ->join('c','account','acc', 'c.chat_from = acc.id') 
     ->orderBy('date_sent','DESC') 
     ->groupby('chat_from') 
     ->where('chat_to ='.$id) 
     ->execute(); 
     return $result->fetchAll(); 

Je veux afficher les données par groupe par et afficher les données contenues dans la dernière entrée.

i » utilisé DOCTRINE DBAL

s'il vous plaît helpme

+0

Toute erreur que vous obtenez du code ci-dessus –

Répondre

0

Comme votre question ne sait pas donc je suppose que vous avez besoin pour obtenir la récente discussion/message par groupe, SQL équivalent pour ce sera

SELECT c.id, c.message, a.name as chat_from, c.chat_to as count 
FROM account a 
JOIN chat c ON(c.chat_from = a.id) 
LEFT JOIN chat cc ON(c.chat_from = cc.chat_from AND c.date_sent < cc.date_sent) 
WHERE cc.date_sent IS NULL AND c.chat_to = @id 
ORDER BY c.date_sent DESC 

donc, en utilisant la doctrine dbal vous pouvez écrire ci-dessus requête comme

$this->qb->select('c.id', 'c.message', 'a.name as chat_from', 'c.chat_to as count') 
     ->from('account', 'a') 
     ->join('a', 'chat', 'c', 'c.chat_from = a.id') 
     ->leftJoin('c', 'chat', 'cc', 'c.chat_from = cc.chat_from AND c.date_sent < cc.date_sent') 
     ->where('cc.date_sent IS NULL') 
     ->andWhere('c.chat_to =' . $id) 
     ->orderBy('c.date_sent', 'DESC') 
     ->execute(); 

Encore une fois sans voir les données de l'échantillon et DDL n'est pas une solution complète.

Reference