我正在使用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有问题......
我需要学说信息。请帮助我。
答案 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(*);
我使用您的示例数据进行了测试,但它确实有用。