我有下面的MySQL查询,它运行良好。它从我的表中返回随机结果。
SET @prev=0,@rownum=0;
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;这是我的桌子:
+-------------+------+
|utilizador_id|nome |
+-------------+------|
| 1 |test1 |
| 1 |test2 |
| 1 |test3 |
| 1 |test4 |
| 1 |test5 |
| 2 |test1 |
| 2 |test2 |
| 2 |test3 |
| 3 |test1 |
| 3 |test2 |
| 3 |test3 |
+-------------+------|期望随机结果:
+-------------+------+
|utilizador_id|nome |
+-------------+------|
| 1 |test2 |
| 1 |test5 |
| 2 |test1 |
| 2 |test2 |
| 3 |test1 |
| 3 |test3 |
+-------------+------|正如前面提到的那样,sql语句在MySQL中工作得很好,但我想在Laravel环境中实现它。
我的问题:如何在Laravel中实现这个sql语句?
发布于 2015-07-21 03:33:29
您可以通过使用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;我只制作了View结果代码来演示所有的结果输出,但这取决于您如何操作代码中的数据。
测试结果
mysql console中MySQL语句的随机结果

你的mysql语句在Laravel中的随机结果

注:
我已经为你解决了这个问题,但我遇到了一个小问题,我在拉腊卡斯特论坛上得到了Kryptonit3的意见。
你可能会找到其他解决这个问题的方法,或者可以用不同的方式解决,但我选择了这样的解决方法。
注1中的全部问题和答案可以找到这里。
https://stackoverflow.com/questions/31256943
复制相似问题