【问题标题】:Mysql - Select four rows per id in one queryMysql - 在一个查询中为每个 id 选择四行
【发布时间】:2012-03-30 02:38:27
【问题描述】:

如果我有一个类别表,其中的特色行默认为 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 一次性从模型传递到控制器?

【问题讨论】:

    标签: php mysql model-view-controller


    【解决方案1】:

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

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

    【讨论】:

    • 我认为 OP 正在尝试从 6 个类别中检索 24 行,每个类别 4 行。
    • 是的,这是正确的,目前我可以从每个中获得 1,但不能从每个中获得 4?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-06-19
      • 2023-03-27
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多