gpt4 book ai didi

mysql - 如何在 Laravel 中实现我的 sql 语句?

转载 作者:行者123 更新时间:2023-11-29 02:55:18 25 4
gpt4 key购买 nike

我有以下 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 语句?

最佳答案

您可以使用 DB::statementDB:rawDB::select 解决此问题。

代码在我的 Laravel 5.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 语句的随机结果 Random results from MySQL

Laravel 中 mysql 语句的随机结果 Random results in Laravel

注意:

1- 我已经为你自己解决了这个问题,但我遇到了一个小问题,我从 Laracast 论坛的 Kryptonit3 那里得到了意见。

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

注释 1 中的完整问题和答案,可以找到 here .

关于mysql - 如何在 Laravel 中实现我的 sql 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31256943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com