0
votes

Comment faire cette requête avec Eloquant / Laravel: sous-requête où dans le groupe par groupe

J'essaie sans succès. Cela ne fonctionne pas: xxx

Je m'attends à obtenir la même sortie que dans MySQL (Workbench). S'il vous plaît aider! Merci d'avance.


1 commentaires

Quelle est votre sortie sur mysql (Workbench) alors? Peut-être que nous nous montrons qui nous aideront à vous aider.


3 Réponses :


1
votes

Essayez ceci:

$output = TableName::whereIn('id', function($query){
            $query->select(\DB::raw(
                       'SELECT * FROM TableName WHERE id IN (
                        SELECT MAX(id)
                        FROM TableName
                        GROUP BY var1, var1, var1);'))
            });

dd($output->toSql(), $output->getBindings());


1 commentaires

Merci Mateus, je ne peux pas faire ce code travailler pour moi. La proposition d'Andrew fonctionne comme prévu: $ Sortie = Nom :: Sélectionnez (Sélectionnez ('*') -> Whareraw ('ID1 dans (Sélectionnez Max (ID2) dans le groupe de noms de Var1, Var2, Var3)') -> Obtenir (); Merci encore!



1
votes

@techienomics Vous pouvez essayer ceci;

$output = TableName::select('*')
           ->whereRaw('id1 in (SELECT MAX(id2) FROM tableName group by var1,var2,var3)')
           ->get();


2 commentaires

Merci Andrew's! Ça marche pour moi. Merci encore!


De rien. S'il vous plaît faites bien de marquer cela comme la solution pour aider les autres.



0
votes

Pourriez-vous essayer celui-ci

$output = TableName::whereIn('id', function($query){
            $query->select(\DB::raw('SELECT MAX(id) FROM TableName'))
                  ->groupBy(['var1', 'var1', 'var1'])
            })->get();


1 commentaires

Merci Jovs, il est manquant d'entrer dans $ Query-> Select je suppose. La proposition d'Andrew fonctionne comme prévu: $ Sortie = Nom :: Sélectionnez (Sélectionnez ('*') -> Whareraw ('ID1 dans (Sélectionnez Max (ID2) dans le groupe de noms de Var1, Var2, Var3)') -> Obtenir (); Merci encore!