【发布时间】:2015-09-24 06:06:57
【问题描述】:
我有以下工作正常的 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 语句?
【问题讨论】:
-
@maytham - 在我看来并非如此,无论如何,这是一个糟糕的答案。从目前的问题来看,您无法告诉我原始数据库查询就是答案。不知道他是否在使用 Eloquent,不知道他的问题实际上是什么,此外,对于粗略的平底船,我想说他的问题更多的是他只需要使用 FooModel::orderBy('utilizador_id' )->orderBy('updated_at')->get() 而不是原始 SQL 调用。简而言之,糟糕的答案 = 否决您是否认为这不公平,我不在乎。所以需要高质量的答案,而不是懒惰的分数希望。
-
@DanWhite 经过一番思考我只同意,因此我删除了我的答案,另一个挑战是他自 7 月 6 日以来没有回复任何事情。 :)
-
@maythamcoolio。同样的(ish)问题也可以得到 -8 分
-
这是对这个问题的全新回答。这个答案已经过测试并且有效。