Můžete to vyřešit pomocí DB::statement
, DB:raw
a DB::select
.
Kód je testován na mém testovacím prostředí Laravel 5.0 a funguje perfektně.
Váš příkaz mysql je také testován a funguje perfektně na konzoli MySQL.
Zde je kód:
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;
")
);
Zobrazit výsledky
echo "utilizador_id | nome <br />";
foreach ($results as $result)
{
echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}
Pamatujte přidat use DB;
za jmenným prostorem:
<?php
namespace App\Http\Controllers;
use DB;
Udělal jsem kód pro zobrazení výsledků pouze pro demonstraci všech výstupů výsledků, ale je na vás, jak s daty ve svém kódu naložíte.
Výsledky testu
Náhodné výsledky vašeho příkazu mysql v konzoli MySQL
Náhodné výsledky vašeho výpisu mysql v Laravel
Poznámka:
1- Tuto otázku jsem pro vás vyřešil sám, ale narazil jsem na malý problém a dostal jsem příspěvek od Kryptonit3 na fóru Laracast.
2- Můžete najít jiná řešení této otázky nebo ji lze vyřešit různými způsoby, ale já jsem se rozhodl vyřešit tento způsob.
Úplnou otázku a odpověď v poznámce 1 naleznete zde .