これは、DB::statement
を使用して解決できます。 、DB:raw
およびDB::select
。
コードは私のLaravel5.0テスト環境でテストされており、完全に機能します。
mysqlステートメントもテストされ、MySQLコンソールで完全に機能します。
コードは次のとおりです:
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;
")
);
結果を表示
echo "utilizador_id | nome <br />";
foreach ($results as $result)
{
echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}
覚えておいてください 追加するuse DB;
名前空間の後:
<?php
namespace App\Http\Controllers;
use DB;
すべての結果出力を示すためだけに結果コードを表示するようにしましたが、コード内のデータを操作する方法はあなた次第です。
テスト結果
MySQLコンソールでのmysqlステートメントのランダムな結果
Laravelでのmysqlステートメントのランダムな結果
注:
1-私はあなたのためにこの質問を自分で解決しましたが、私は小さな問題に直面し、LaracastフォーラムのKryptonit3から入力を得ました。
2-この質問に対する他の解決策を見つけるか、さまざまな方法で解決できる可能性がありますが、私はこの方法で解決することを選択しました。
注1の完全な質問と回答は、ここ にあります。 。