1

我正在使用 mysql 和教义2。

我有两个像下面这样的表

用户.php

ID   name
1    | John
2    | Jonas
3    | Nick

类.php

ID  attenduser
1    | 3
2    | 3
3    | 1
4    | 1
5    | 3
6    | 2

Class.attenduser 受 User.ID 约束

这意味着尼克上了三堂课。约翰两次,乔纳斯一次。

现在我通过这个学说 sql 获取用户列表

SELECT p FROM UserBundle:User p

但是,我想按他上课的次数排序用户列表。

我应该如何改变这个?

根据@Palec 的回答

我做了这句话并尝试。

     SELECT u,COUNT(l.id)
   FROM UserBundle:User u 
    INNER JOIN UserBundle:Class c
   with c.attenduser = u.id group BY u.id 
        ORDER by COUNT(l.id) DESC

但它说

QueryException: [Syntax Error] line 0, col 223: Error: Expected end of string, got '(' 

我认为 COUNT 虽然有问题....

我需要教义信息。请帮助我。

4

2 回答 2

1

由于没有使用 Doctrine2 或任何其他 ORM 的经验,我只能用纯 SQL 向您展示一个解决方案。

假设第一个表被命名users,第二个被命名classes。您需要加入这些表格,计算每个用户参加课程的次数并相应地对结果进行排序。

SELECT users.*, COUNT(*) AS cnt
FROM users JOIN classes ON (users.id = classes.attenduser)
GROUP BY users.id
ORDER BY COUNT(*);

我使用您的示例数据对此进行了测试,并且可以正常工作。

于 2013-09-19T11:20:37.377 回答
1

您需要进行子选择,如下所示:

SELECT user.name, COUNT(class.id) AS count 
FROM UserBundle:User 
AS user
JOIN UserBundle:Class
AS class
ON class.attenduser = user.id
GROUP BY user.id
ORDER BY count DESC

我没有机会对此进行测试,因此请告诉我是否失败。

于 2013-09-19T11:18:51.570 回答