0

MySQL と Laravel 3 を使用しています。

次の表があります。

tags
  id         INT
  name       INT
  created_at TIMESTAMP

casesタグ名は一意ではなく、タグはピボット テーブルを介して呼び出される別のテーブルに関連付けられます。

最近作成された 50 個のタグを名前順に並べ替える必要があります)。問題は、名前付きタグのインスタンスが 1 つだけ必要なことです (たとえば、「funny」というタグが 2 つある場合、最新のものだけを返したいとします。

たとえば、これが私のタグ テーブルであるとします。

id   name     created_at
1    funny    2013-4-10
2    sad      2013-6-5
3    angry    2013-1-3
4    funny    2013-6-7
5    grumpy   2013-5-20

次の順序でタグを返したい:

funny(4)
sad(2)
grumpy (5)
angry(3)

「面白い」タグが 1 つだけ返されていることに注意してください (最新のタグ)。

私はこれを試しました:

$tags = DB::table('tags')->order_by('created_at', 'desc')->group_by('name')->distinct()->take(50)->get();?>

ただし、上記のコードは次を返します。

sad (2)
grumpy (5)
funny (1)  <--- this is the earlier tag NOT the most recent one
angry (3)

ここで何が間違っているのかわかりません...

4

2 に答える 2

0

laravelについてはわかりませんが、名前でグループ化しているようですが、created_atで集計関数を使用していないようです。

純粋な SQL では、次のようになります。

SELECT name, MAX(created_at) FROM yourTable GROUP BY name ORDER BY MAX(created_at) DESC

sqlfiddleでライブで動作するのを見てください

于 2013-06-07T15:57:17.663 に答える