【发布时间】:2011-06-15 16:34:17
【问题描述】:
目前,我正在尝试获取一个用户的所有提交以及特定提交的所有 cmets。我这样做的方式效率极低(在循环内查询)。
有人告诉我使用 Group By,但我不确定如何让它正常工作。
选择所有提交信息的第一个查询是:
SELECT
submissions.user_id,
submissions.id,
submissions.quote,
submissions.filename,
submissions.date_added,
submissions.views
FROM
`submissions`
WHERE
submissions.user_id = ?
ORDER BY
submissions.date_added
DESC
第二个(获取评论数)是:
SELECT
count(id) AS `comments`
FROM
`comments`
WHERE
submission_id = '{$subId}'
那些工作,但由于它们会变慢,所以我试图想出这个,但不知道如何正确执行它。
SELECT
submissions.user_id,
submissions.id,
submissions.quote,
submissions.filename,
submissions.date_added,
submissions.views,
COUNT(comments.id) as `comment`
comments.submission_id
FROM
submissions
LEFT JOIN
comments
ON
submissions.id=comments.submission_id
WHERE
submissions.user_id = ?
GROUP BY comment
关于如何解决这个问题的任何建议?我最初没有合并前两个查询的原因是因为 count 总是会为整个查询返回一行。
【问题讨论】:
-
连接查询看起来不错。你试过运行它吗?请注意,其中的
?表示占位符参数,用于准备好的语句。您的原始版本进行了直接查询构建。 -
我了解占位符。我正在使用带有准备好的语句的 PDO。至于那个查询,我收到以下错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'comments.submission_id FROM submissions LEFT JOIN ' at line 9 -
啊,很简单,你在
COUNT(...) as ...行后面少了一个逗号