首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Laravel中实现我的sql语句?

问如何在Laravel中实现我的sql语句?
EN

Stack Overflow用户
提问于 2015-07-06 22:44:15
回答 1查看 15.3K关注 0票数 3

我有下面的MySQL查询,它运行良好。它从我的表中返回随机结果。

代码语言:javascript
复制
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;

这是我的桌子:

代码语言:javascript
复制
+-------------+------+
|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 |
+-------------+------|

期望随机结果:

代码语言:javascript
复制
+-------------+------+
|utilizador_id|nome  |
+-------------+------|
|     1       |test2 |
|     1       |test5 |
|     2       |test1 |
|     2       |test2 |
|     3       |test1 |
|     3       |test3 |
+-------------+------|

正如前面提到的那样,sql语句在MySQL中工作得很好,但我想在Laravel环境中实现它。

我的问题:如何在Laravel中实现这个sql语句?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-21 03:33:29

您可以通过使用DB::statement、DB:raw和DB::select来解决这个问题。

代码是在我的Laravel5.0测试环境上进行测试的,它工作得非常完美。

您的mysql语句也经过测试,它在MySQL控制台上工作得很好。

这里是代码:

代码语言:javascript
复制
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;
        ")
    );

视图结果

代码语言:javascript
复制
echo "utilizador_id | nome <br />";

foreach ($results as $result)
{
    echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}

记住在名称空间之后添加了use DB;:

代码语言:javascript
复制
<?php

namespace App\Http\Controllers;

use DB;

我只制作了View结果代码来演示所有的结果输出,但这取决于您如何操作代码中的数据。

测试结果

mysql console中MySQL语句的随机结果

​

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

​

注:

我已经为你解决了这个问题,但我遇到了一个小问题,我在拉腊卡斯特论坛上得到了Kryptonit3的意见。

你可能会找到其他解决这个问题的方法,或者可以用不同的方式解决,但我选择了这样的解决方法。

注1中的全部问题和答案可以找到这里。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31256943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档