【问题标题】:Mysql Join limit on from tableMysql Join 对表的限制
【发布时间】:2015-04-01 09:15:48
【问题描述】:

我有下一个 mysql 查询

SELECT 
   `i`.`id_item`, 
   `c`.`id_category`
FROM `items` AS `i` 
LEFT JOIN `categories` AS `c` ON c.id_category = i.id_category 
WHERE (i.id_page = '7') 
ORDER BY `c`.`id_category` ASC, `i`.`id_item` ASC

项目可以属于一个类别,也可以不为它们定义类别。 我需要将项目表中的结果限制为每个类别的 X 个随机值,或者如果没有定义类别,则限制为 X 个随机值。我该怎么做?

【问题讨论】:

    标签: mysql join limit


    【解决方案1】:

    尝试使用“分组依据”,然后将其限制为 x 值 (LIMIT X)。我正在使用 X = 5;

    SELECT 
       `i`.`id_item`, 
       `c`.`id_category`
    FROM `items` AS `i` 
    LEFT JOIN `categories` AS `c` ON c.id_category = i.id_category 
    WHERE (i.id_page = '7') GROUP BY i.id_category,i.id_item 
    ORDER BY `c`.`id_category` ASC, `i`.`id_item` ASC LIMIT 5
    

    【讨论】:

    • 这将我限制为每个类别 1 个项目(对于 'GROUP BY i.id_category')或者如果我使用 'GROUP BY i.id_category,i.id_item' 没有区别,我需要 5每个类别 X = 5
    • 可以说,该类别有 10 个条目。现在必须在两个表中有一个列,对于这 10 个条目,或者至少对于其中的一些条目,它也会发生变化。您也需要使用它按结果分组。如果您使用 select (*) ,您可以找到此列。然后在 i.id_category 后的 group by 子句中使用此列,用逗号分隔。
    • 如果你通过使用 company_id 来使用 group,它只会返回一行,尽管有超过 1 行。但是看“status”,它也在变化,所以你也需要按它分组,即按company_id,status分组。 |金额 |状态 | company_id | +--------+--------+------------+ | 1 | 88 | 3688 | | 1 | E | 3688 | | 1 | E | 3688 | | 1 | E | 3688 | | 1 | E | 3688 | | 1 | E | 3688 | | 1 | E | 3688 | | 1 | E | 3688 | | 1 | E |第3688章|
    猜你喜欢
    • 2013-02-20
    • 1970-01-01
    • 2010-09-14
    • 2012-08-06
    • 2012-04-26
    • 1970-01-01
    • 2013-10-05
    • 2014-06-03
    • 2011-03-25
    相关资源
    最近更新 更多