MySQL SELECT JOIN LIMIT row Comment per Post 和 LIMIT row Post per User

Posted

技术标签:

【中文标题】MySQL SELECT JOIN LIMIT row Comment per Post 和 LIMIT row Post per User【英文标题】:MySQL SELECT JOIN LIMIT row Comment per Post and LIMIT row Post per User 【发布时间】:2020-05-20 11:54:46 【问题描述】:

我在数据库中有 3 个表,ig_user、ig_post 和 ig_komentar

ig_user
id_ig_user   username     nama
---------------------------------------
1            elizabeth    elizabeth store
2            celmirashop  celmira store


ig_post
----------------------------------
id_ig_post    url_post    username
1             a1b2c3      elizabeth
2             d1e2f3      elizabeth
3             g1h2i3      elizabeth

4             j1k2l3      celmirashop
5             m1n2o3      celmirashop
6             p1q2r3      celmirashop


ig_komentar
------------------------------------------
id_ig_komentar    url_post   nama_komentar
1                 a1b2c3     arif
2                 a1b2c3     budi
3                 a1b2c3     candra
4                 a1b2c3     doni

5                 d1e2f3     ema
6                 d1e2f3     fellaini
7                 d1e2f3     gusti
8                 d1e2f3     hussein
9                 ......     ........
10                ......     ........
11                ......     ........

我想选择每个用户有 2 个帖子的数据,每个帖子有 3 个评论(来自表 ig_komentar)

我试试这个查询

SELECT p1.nama_komentar
     , p1.isi_komentar
     , p1.id_ig_komentar
     , ip.username
     , p1.url_post 
  FROM ig_komentar p1 
  JOIN ig_komentar p2 
    ON p1.url_post = p2.url_post 
   AND p2.id_ig_komentar >= p1.id_ig_komentar 
  JOIN ig_post ip 
    ON p1.url_post=ip.url_post 
 GROUP 
    BY p1.id_ig_komentar
     , p1.url_post 
HAVING COUNT(*) <= 3 
 ORDER 
    BY url_post
     , id_ig_komentar

并在每个帖子中返回 3 条评论/评论。但是,我也需要用户。

如何查询在每个帖子中返回 3 条评论/评论,在每个用户中返回 2 条这样的帖子?

username     url_post   nama_komentar
elizabeth    a1b2c3     arif            
elizabeth    a1b2c3     budi            
elizabeth    a1b2c3     candra          

elizabeth    d1e2f3     ema             
elizabeth    d1e2f3     fellaini        
elizabeth    d1e2f3     gusti           

celmirashop  j1k2l3     taufiq 
celmirashop  j1k2l3     uzumaki
celmirahsop  j1k2l3     vivian 

celmirashop  m1n2o3     wahyu           
celmirashop  m1n2o3     xarman          
celmirashop  m1n2o3     yoris

用户名 elizabeth 有 2 个 url_post,在每个帖子中有 3 个 nama_komentar 用户名 celmirashop havw 2 url_post,在每个帖子中都有 3 nama_komentar

【问题讨论】:

另外,给用户分配一个 id,然后引用不同的列作为另一个表的外键,这有点奇怪。 请提供所需的输出。 听起来像是一个“分组”问题;查看标签。 @RickJames 我已经编辑了这个问题。我放了我想要的结果 【参考方案1】:

考虑一个稍微不同的输出,但来自更简单的 SQL:

SELECT ( SELECT username FROM ig_post WHERE url_post = k.url_post ) AS username,
       url_post,
       SUBSTRING_INDEX(GROUP_CONCAT(nama_komentar), ',', 3) AS namas
    FROM ig_komentar AS k
    GROUP BY url_post;

【讨论】:

您的查询给出了结果,但我希望所有结果都作为一行,而不是连续

以上是关于MySQL SELECT JOIN LIMIT row Comment per Post 和 LIMIT row Post per User的主要内容,如果未能解决你的问题,请参考以下文章

MySQL语法顺序及执行顺序

Mysql的join语句

mysql 分页查询

MySQL - 优化查询(LIMIT、OFFSET、JOIN)> 2500 万行

MySQL随记 - 分页查询

MySQL 子查询与 LIMIT 与 JOIN