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

时间:2012-03-30 02:38:27

标签: php mysql model-view-controller

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

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

然后返回它们并将foreach结果作为类别,然后将foreach类别作为videoList

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?

2 个答案:

答案 0 :(得分:2)

您的基本方法可行,但您的SQL存在一些问题:

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

答案 1 :(得分:1)

你试图从6个类别中的每一个中获取4行,对吧?总共24行?

this question的第一个答案可能适用于您的情况。