Możesz to rozwiązać za pomocą DB::statement
, DB:raw
i DB::select
.
Kod jest testowany na moim środowisku testowym Laravel 5.0 i działa idealnie.
Twoja instrukcja mysql jest również testowana, działa idealnie na konsoli MySQL.
Oto kod:
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;
")
);
Wyświetl wyniki
echo "utilizador_id | nome <br />";
foreach ($results as $result)
{
echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}
Pamiętaj dodano use DB;
po spacji nazw:
<?php
namespace App\Http\Controllers;
use DB;
Zrobiłem kod Wyświetl wyniki tylko po to, aby zademonstrować wszystkie wyniki, ale to od Ciebie zależy, jak manipulować danymi w kodzie.
Wyniki testu
Losowe wyniki Twojej instrukcji mysql w konsoli MySQL
Losowe wyniki Twojego oświadczenia mysql w Laravel
Uwaga:
1- Ja sam rozwiązałem to pytanie, ale napotkałem mały problem i otrzymałem informacje od Kryptonit3 na forum Laracast.
2- Możesz znaleźć inne rozwiązania tego pytania lub można je rozwiązać na różne sposoby, ale zdecydowałem się rozwiązać w ten sposób.
Pełne pytanie i odpowiedź w uwadze 1 można znaleźć tutaj .