获取按其在另一个表中显示的次数排序的列表

时间:2013-09-19 10:55:40

标签: mysql doctrine-orm

我正在使用mysql和doctrine2。

我有两张如下表格

user.php的

ID   name
1    | John
2    | Jonas
3    | Nick

Class.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有问题......

我需要学说信息。请帮助我。

2 个答案:

答案 0 :(得分: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

我没有机会测试这个,所以让我知道它是否失败。

答案 1 :(得分: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(*);

我使用您的示例数据进行了测试,但它确实有用。