2014-01-22 67 views
2

JOIN我想算一笔左边的条目加入MySQL,但我总是得到一个错误留下了COUNT收到错误

SELECT g.uid,g.datei, u.id, u.avatar, u.avatarapproved, a.points, COUNT (g.uid) as hits 
FROM jos_findme_gallery as g 
LEFT JOIN jos_findme as u ON g.uid= u.user_id 
LEFT JOIN jos_alpha_userpoints as a ON g.uid= a.userid 
WHERE u.avatar IS NOT NULL 
ORDER BY g.uid asc 

功能db1140411-dualda.COUNT不存在。检查参考手册中的'函数名称分析和解析'部分

任何想法?

+0

你需要将它们组由g.uid为COUNT函数工作 – TheSavage

+0

会容易得多,如果你从查询显示您的表格,数据和预期的结果。 – MrSimpleMind

回答

1

您需要按某种方式分组。 COUNT是一个聚合函数。

SELECT g.uid,g.datei, u.id, u.avatar, u.avatarapproved, a.points, COUNT(1) as hits 
... 
GROUP BY g.uid 
ORDER BY ... 

另外,为什么你有2个左连接?你想从哪两个连接表中统计行数?使用聚合功能时

+0

[其实,你不在MySql。](http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html)它也会是一个不同的错误信息.. –

+0

你不会但结果是未定义的。 –

2

应该使用GROUP BY,但你要因为COUNT(之间的空间的此特定错误。

From the MySQL Docs:

该函数调用的需求与名称之间没有空格 写入和括号仅适用于有特殊的考虑内置 功能。 COUNT就是这样一个名字。

为了解决这个问题,摆脱了空间的...扔在GROUP BY以明确:

SELECT 
    g.uid, 
    g.datei, 
    u.id, 
    u.avatar, 
    u.avatarapproved, 
    a.points, 
    COUNT(g.uid) as hits 
FROM jos_findme_gallery as g 
LEFT JOIN jos_findme as u ON g.uid= u.user_id 
LEFT JOIN jos_alpha_userpoints as a ON g.uid= a.userid 
WHERE u.avatar IS NOT NULL 
GROUP BY 
    g.uid, 
    g.datei, 
    u.id, 
    u.avatar, 
    u.avatarapproved, 
    a.points 
ORDER BY g.uid asc 
0

我觉得有数量和你的票,因为我们可以在看到之间没有空格其他例子。

0

试试这个:

SELECT g.uid, g.datei, u.id, u.avatar, u.avatarapproved, a.points, COUNT(g.uid) AS hits 
FROM jos_findme_gallery AS g 
LEFT JOIN jos_findme AS u ON g.uid= u.user_id 
LEFT JOIN jos_alpha_userpoints AS a ON g.uid= a.userid 
WHERE u.avatar IS NOT NULL 
GROUP BY u.id 
ORDER BY g.uid ASC