0

usersテーブルがあり、ユーザーが多くのテーブルを持つことができるとしましょうposts(列postsを持つ)。user_id

最初の 5 ユーザーの投稿を取得したいのですが、ユーザーごとに 1 つの投稿しか取得できません。したがって、最後に、各投稿が異なるユーザーに属する 5 つの投稿が必要です。SQLでそれを行うにはどうすればよいですか?

4

3 に答える 3

1

2つのテーブルが必要です

Table : users ; Columns : users_id , user_name
Table2: posts ; Columns : post_id , post_description , users_id

そして今、それぞれに1つの投稿ですべてのユーザーを取得します

SELECT * FROM users as u
LEFT JOIN (SELECT * FROM posts LIMIT 1)  as p on p.users_id = u.users_id
LIMIT 5 ORDER BY ASC

各ユーザーの最も古い投稿を取得したい場合

SELECT * FROM users as u
LEFT JOIN (
    SELECT 
        MIN(post_id) as post_id , 
        post_description , 
        users_id  FROM posts
    )  as p on p.users_id = u.users_id
LIMIT 5 ORDER BY ASC

最新の投稿には、MIN(post_id) の代わりに MAX(post_id) を使用します。

于 2012-08-28T19:08:59.547 に答える
0

これにより、最新の 5 つの投稿が得られ (より高い ID の投稿が「新しい」と仮定して)、各結果が異なるユーザーからのものになるように強制されます。

SELECT p.user_id, MAX(p.post_id) AS post_id 
FROM posts AS p
GROUP BY p.user_id -- get unique users
ORDER BY p.post_id DESC -- sort results by post_id number, descending
LIMIT 5

この方法で、他のユーザーや投稿データをロードする必要がある場合は、目的のユーザー ID と投稿 ID を取得してから個別にロードするのが最適です。

于 2012-08-28T19:15:01.047 に答える
0

多分それはあなたを助けるでしょう:

select * 
  from users u
  join posts p on p.idUser = u.id
               and p.id = ( select max(id) from posts where p.id=u.id ) 
 ORDER BY i.id LIMIT 5
于 2012-08-28T19:11:09.337 に答える