1

以下のクエリを変更して、スクリプトのパフォーマンスに影響を与えずにテーブルからPER でフェッチされる行数を制限useridpost_listするにはどうすればよいですか(post_list テーブルはここでは 10,000 行を超えています)。

$sql = query("SELECT userid, post, post_id, id, username 
FROM post_list, users
WHERE post_list.userid = users.id AND post_id%4 = 0 
ORDER BY post_id"); 

post_list.userid ごとに最大 5 つの投稿が必要です。

したがって、post_list テーブルに 10 人のユーザーがいる場合、クエリは 50 行を返します。

編集:

USERS テーブル

  id        username
   1          bill
   2          mark
   3          kate

POST_LIST テーブル

 post_id    userid    post 
   1           1       foo
   2           3       bar
   3           3       baz
   4           1       qux
   5           1       foo_1
   6           1       bar_1
   7           1       baz_1
   8           1       qux_1

ここで、クエリは Bill から 5 件の投稿のみを返す必要があります。

また、全体の行数を 50 に制限する必要があります。

4

3 に答える 3

4

使用するLIMIT

ORDER BY post_id LIMIT 5;

あなたがコメントしたように、こちらの記事を見ることができます。これは、SQL でグループごとに最初/最小/最大行を選択する方法について詳しく説明しています。

于 2013-11-05T05:10:41.443 に答える
2
SELECT pl.*, u.*
FROM users AS u
JOIN (
    SELECT 
        userid,
        SUBSTRING_INDEX(GROUP_CONCAT(post_id ORDER BY post_id DESC), ',', 5) AS last_5_posts
    FROM post_list
    GROUP BY userid
) AS pl5 ON(u.id = pl5.userid)
JOIN post_list AS pl ON (FIND_IN_SET(pl.post_id, pl5.last_5_posts))
ORDER BY pl.post_id DESC
LIMIT 50

例: http://sqlfiddle.com/#!2/36f12/30

于 2013-11-05T08:12:39.633 に答える
1

You can do this by group by and count. Please try this query.

$sql = query("SELECT userid, post, post_id,username, wish_likes FROM post_list, 
users WHERE post_list.userid = users.id AND post_id%4 = 0 group by userid,post,   
 post_id,username, wish_likes having 
count(post_id) <= 5 ORDER BY post_id"); 
于 2013-11-05T05:24:07.593 に答える