Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按列表在另一个表中出现的次数对列表进行排序_Mysql_Doctrine Orm - Fatal编程技术网

Mysql 按列表在另一个表中出现的次数对列表进行排序

Mysql 按列表在另一个表中出现的次数对列表进行排序,mysql,doctrine-orm,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 FR

我正在使用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
但是,我想让用户列表按他上课的次数排序

我应该如何改变这个

A根据@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 '(' 
我觉得伯爵有点不对劲


我需要条令信息。请帮助我。

你需要做一个子选择,类似这样:

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

我还没有机会测试它,所以如果它失败,请告诉我。

由于没有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(*);

我使用您的示例数据对此进行了测试,效果良好。

我从您的评论中得到了答案,在此非常感谢您