Mysql-在一个查询中为每个id选择四行


Mysql - Select four rows per id in one query

如果我有一个类别表,其中的特征行默认为0,那么1/2/3/4/5/6将按显示顺序显示六个类别。

我可以使用六个特征中的每一个的类别id在一个查询中从视频表中选择4个具有相应类别id的视频,然后用foreach将结果分开吗?

然后返回它们并将foreach结果作为类别,然后将foreach类别作为视频列表

SELECT id, title
FROM videos 
WHERE category = (SELECT id FROM category WHERE featured > 0) 
LIMIT 4

返回这样的东西:

foreach($result as $categoryVideos):
    echo $categoryVideos[categoryName];
    foreach($categoryVideos as $video):
        echo $video[title];
    endforeach;
endforeach;

我知道它需要连接等,但我是不是把这种方式弄得太复杂了?我把我的大脑空白归咎于睡眠不足,因为我通常会回答这样的问题。。

它更复杂,因为我试图一次性将所有这些数据从模型传递到控制器,结果是$result?

您的基本方法会起作用,但您的SQL:有一些问题

  • LIMIT 4不一定按您期望的顺序返回记录。使用ORDERBY告诉SQL您希望记录的顺序。如果我理解正确,类别排名在category表中。如果是这种情况,则需要ORDERBY和子查询中的限制,例如SELECT id FROM category WHERE featured > 0 ORDERBY featured LIMIT 4
  • 您的子查询WHERE category = (SELECT...语法错误。将=替换为IN

您正试图从6个类别中的每一个类别中提取4行,对吗?总共24行?

这个问题的第一个答案可能适用于您的案例。