users
テーブルがあり、ユーザーが多くのテーブルを持つことができるとしましょうposts
(列posts
を持つ)。user_id
最初の 5 ユーザーの投稿を取得したいのですが、ユーザーごとに 1 つの投稿しか取得できません。したがって、最後に、各投稿が異なるユーザーに属する 5 つの投稿が必要です。SQLでそれを行うにはどうすればよいですか?
users
テーブルがあり、ユーザーが多くのテーブルを持つことができるとしましょうposts
(列posts
を持つ)。user_id
最初の 5 ユーザーの投稿を取得したいのですが、ユーザーごとに 1 つの投稿しか取得できません。したがって、最後に、各投稿が異なるユーザーに属する 5 つの投稿が必要です。SQLでそれを行うにはどうすればよいですか?
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) を使用します。
これにより、最新の 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 を取得してから個別にロードするのが最適です。
多分それはあなたを助けるでしょう:
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