Bạn có thể giải quyết vấn đề này bằng cách sử dụng DB::statement
, DB:raw
và DB::select
.
Mã được thử nghiệm trên môi trường thử nghiệm Laravel 5.0 của tôi và nó hoạt động hoàn hảo.
Câu lệnh mysql của bạn cũng đã được kiểm tra, nó hoạt động hoàn hảo trên bảng điều khiển MySQL.
Đây là mã:
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;
")
);
Xem kết quả
echo "utilizador_id | nome <br />";
foreach ($results as $result)
{
echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}
Hãy nhớ để thêm use DB;
sau khoảng cách tên:
<?php
namespace App\Http\Controllers;
use DB;
Tôi đã tạo mã Xem kết quả chỉ để chứng minh tất cả kết quả đầu ra, nhưng cách thao tác dữ liệu trong mã của bạn là tùy thuộc vào bạn.
Kết quả kiểm tra
Kết quả ngẫu nhiên của câu lệnh mysql của bạn trong bảng điều khiển MySQL
Kết quả ngẫu nhiên về câu lệnh mysql của bạn trong Laravel
Lưu ý:
1- Tôi đã tự giải quyết câu hỏi này cho bạn nhưng tôi gặp phải một vấn đề nhỏ và tôi đã nhận được thông tin đầu vào từ Kryptonit3 trong diễn đàn Laracast.
2- Bạn có thể tìm thấy các giải pháp khác cho câu hỏi này hoặc nó có thể được giải quyết theo nhiều cách khác nhau, nhưng tôi đã chọn cách giải quyết theo cách này.
Bạn có thể tìm thấy câu hỏi và câu trả lời đầy đủ trong Chú thích 1 tại đây .