Du kan lösa detta genom att använda DB::statement
, DB:raw
och DB::select
.
Koden är testad i min Laravel 5.0-testmiljö och den fungerar perfekt.
Din mysql-sats är också testad, den fungerar perfekt på MySQL-konsolen.
Här är koden:
DB::statement(DB::raw('SET @prev=0,@rownum=0'));
$results =
DB::select(
DB::raw("
SELECT utilizador_id, nome
FROM (
SELECT *,
IF( @prev <> utilizador_id,
@rownum := 1,
@rownum := @rownum+1
) AS rank,
@prev := utilizador_id,
@rownum
FROM (
SELECT * FROM `anuncios`
ORDER BY utilizador_id, rand()
) AS random_ads
) AS ads_ranked
WHERE rank <= 2;
")
);
Visa resultat
echo "utilizador_id | nome <br />";
foreach ($results as $result)
{
echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}
Kom ihåg för att lägga till use DB;
efter namnutrymmet:
<?php
namespace App\Http\Controllers;
use DB;
Jag har skapat Visa resultatkod endast för att visa alla resultat, men det är upp till dig hur du ska manipulera data i din kod.
Testresultat
Slumpmässiga resultat av din mysql-sats i MySQL-konsolen
Slumpmässiga resultat av din mysql-sats i Laravel
Obs!
1- Jag har löst den här frågan själv åt dig men jag stod inför ett litet problem och jag fick input från Kryptonit3 i Laracast-forumet.
2- Du kanske hittar andra lösningar på den här frågan eller så kan den lösas på olika sätt, men jag har valt att lösa detta sätt.
Hela frågan och svaret i not 1, kan hittas här .