2011-10-19 6 views
1

私はこれに対する答えを探しましたが、私はそれを見つけることはできません。記事テーブルに記事が格納されているサイトと、ユーザーテーブルに投稿されている投稿者があります。私はどのくらい最近に記事を書いたかによって注文された著者のリストを入手したかったのです。MySQLレシピエントでDistinctを選択すると、結合テーブルによって結合されます

これは私のユーザーIDを与える:

SELECT distinct a.user_id 
FROM `article` as a 
ORDER BY a.id desc 

問題は、そのようにすぐに私は順序の変更を結合することによりに名前を持参しようとすると、それはユーザIDであるということです。私はこれを試してみた:

SELECT distinct a.user_id, u.name 
FROM `article` as a 
LEFT JOIN user as u on u.id = a.user_id 
ORDER BY a.id desc, u.id desc 

SELECT distinct a.user_id, u.name 
FROM `article` as a 
LEFT JOIN user as u on u.id = a.user_id 
ORDER BY u.id desc, a.id desc 

が、両方は、名前の順序を変更します。私は明らかに何か愚かなことをやっているが、何?

+0

あなたは、彼らが記事を書いたか、最近でソートしたいのですが、IDでソートされているのmysqlにそれを翻訳することができますフィールド。なぜ「ArticleWrittenDate」フィールドなんかなんていらないの? – JohnFx

+0

あなたは正しいのですが、もちろん:write_on datetimeフィールドがありますが、発行日とidフィールドの間に大きな相違はありません。簡単にするために物事を落とそうとしていました。いずれにしても適合する。 :) – TheoGB

答えて

1

DISTINCTは、ORDER BYで動作するように起こっているという事実集約関数の使用であり、何を求めているの鍵を信じて...から選択する回答の多くあなたの最初の例では、標準のSQLではなく流行です。あなたはこのようなものが必要:

SELECT a.user_id, u.name 
    FROM article a 
    LEFT JOIN user u ON u.id = a.user_id 
    GROUP BY a.user_id 
    ORDER BY MAX(a.id) desc 
+0

私は同意しています。+1 – tybro0103

+0

ありがとう!それは間違いなく機能し、私もそれを理解しています。 :) – TheoGB

0

は種類(例に応じて)ユーザーIDおよび/または文書番号のいずれかによって行BYこの

SELECT a.user_id, u.name 
FROM `article` a 
LEFT JOIN user u on u.id = a.user_id 
GROUP BY a.user_id 
ORDER BY a.id desc 
0

ご注文をしてみてください。

名前で確実にソートするには、ORDER BYフィールドにu.nameフィールドを含めます。

0

以下の線に沿って何かが動作するはずです:

select users.id, articles.id, max(articles.created_at) as recent_date 
    from users 
    left join articles on users.id = articles.user_id 
    group by articles.id 
    order by recent_date 

なく、あなたのフィールドが命名されている正確に何を確認し、すべてが、これは正しい方向にあなたを指している必要があります。

あなたは得た私はMAX()http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_max

0

これはpostgresの構文ですが、あなたは簡単に

select u.*, q.last_article_id 
    from user u 
     inner join (
     select a.user_id, max(a.id) as last_article_id 
      from article a 
      group by a.user_id 
    ) q 
     on u.id = a.q.id 
    order by q.last_article_id desc 
関連する問題