获取有限的类别列表和相关项目的有限列表

时间:2014-04-15 08:05:18

标签: mysql symfony pdo doctrine-orm

我正在为Symfony2中的IOS应用程序开发API。 此时db中有10个类别,40个教练(这是与app相关的术语)(每个教练与特定类别有关系,1:n / n:1关系)。 当用户打开应用程序时,他/她必须看到类别列表(限制5),并且紧跟在5个教练的每个类别名称列表之后(限制5): enter image description here

此时我正在这样取得它,但似乎LIMIT和OFFSET在类别列表中不能正常工作(当有不同的教练队员时出现问题,例如,如果有3名教练在cat1中,2个教练在cat 2中,5个教练在cat3中等等......):

// Temporary solution
$connection = $this->getEntityManager()
            ->getConnection()
            ->prepare('
              SELECT
              c.id AS category_id,
              c.name AS category_name,
              c.icon AS category_icon,
              co3.id AS coach_id,
              co3.name AS coach_name,
              co3.started_at AS coach_started_at
              FROM category AS c
              LEFT JOIN
              (
                SELECT co.* FROM coach AS co
                WHERE (
                  SELECT COUNT(*)
                  FROM coach AS co2
                  WHERE co.category_id = co2.category_id
                  AND co.id <= co2.id
                ) <= :coachLimit
              ) AS co3 ON c.id = co3.category_id
              LIMIT :categoryOffset, :categeoryLimit
            ');
    $connection->bindValue('coachLimit', 5);

    $connection->bindValue('categoryOffset', $offset);
    $connection->bindValue('categeoryLimit', $limit);
    $connection->execute();

    $results = $connection->fetchAll(\PDO::FETCH_ASSOC);

我的问题是,我应该如何编写(或编写)SQL来获取类别和相关教练的列表,其中LIMIT和OFFSET属于类别,而教练中只有LIMIT? 通过限制检索记录和相关记录的最佳方法是什么?

0 个答案:

没有答案