Mysql 按列表在另一个表中出现的次数对列表进行排序
我正在使用mysql和doctrine2 下面我有两张这样的桌子 User.phpMysql 按列表在另一个表中出现的次数对列表进行排序,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
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(*);
我使用您的示例数据对此进行了测试,效果良好。我从您的评论中得到了答案,在此非常感谢您