我正在为Symfony2中的IOS应用程序开发API。 此时db中有10个类别,40个教练(这是与app相关的术语)(每个教练与特定类别有关系,1:n / n:1关系)。 当用户打开应用程序时,他/她必须看到类别列表(限制5),并且紧跟在5个教练的每个类别名称列表之后(限制5):
此时我正在这样取得它,但似乎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? 通过限制检索记录和相关记录的最佳方法是什么?