Я использую три таблицы MySQl:
Комментарий
commentid loginid submissionid comment datecommented
login
loginid username password email actcode disabled activated created points
представление
submissionid loginid title url displayurl datesubmitted
В этих трех таблицах "loginid" соответствует.
Я хотел бы потянуть верхние 10 идентификаторов входа на основе количества "поданных файлов". Я хотел бы отобразить их в трех столбце HTML-таблицы, которая показывает "имя пользователя" в первом столбце, количество "поданных" во втором столбце и количество "комментариев" в третьем столбце.
Я попытался использовать запрос ниже, но это не сработало. Любая идея, почему бы и нет?
Спасибо заранее,
Джон
$sqlStr = "SELECT
l.username
,l.loginid
,c.commentid
,count(s.commentid) countComments
,c.comment
,c.datecommented
,s.submissionid
,count(s.submissionid) countSubmissions
,s.title
,s.url
,s.displayurl
,s.datesubmitted
FROM comment AS c
INNER JOIN login AS l ON c.loginid = l.loginid
INNER JOIN submission AS s ON c.loginid = s.loginid
GROUP BY c.loginid
ORDER BY countSubmissions DESC
LIMIT 10";
$result = mysql_query($sqlStr);
$arr = array();
echo "<table class=\"samplesrec1\">";
while ($row = mysql_fetch_array($result)) {
echo '<tr>';
echo '<td class="sitename1"><a href="http://www...com/.../members/index.php?profile='.$row["username"].'">'.stripslashes($row["username"]).'</a></td>';
echo '</tr>';
echo '<td class="sitename1">'.stripslashes($row["countSubmissions"]).'</td>';
echo '</tr>';
echo '</tr>';
echo '<td class="sitename1">'.stripslashes($row["countComments"]).'</td>';
echo '</tr>';
}
echo "</table>";
SELECT
l.loginid,
l.username,
COALESCE(s.total, 0) AS numSubmissions,
COALESCE(c.total, 0) AS numComments
FROM login l
LEFT JOIN (
SELECT loginid, COUNT(1) AS total
FROM submission
GROUP BY loginid
) s ON l.loginid = s.loginid
LEFT JOIN (
SELECT loginid, COUNT(1) AS total
FROM comment
GROUP BY loginid
) c ON l.loginid = c.loginid
GROUP BY l.loginid
ORDER BY numComments DESC
В вашем запросе вы выбрали не-групповые элементы, такие как commentid, комментарий и т.д. Это должно дать желаемый результат.
выберите l.username, count (s.submissionid) как NoOfSubmissions, count (c.commentid) как NoOfComments из комментария c INNER JOIN submit s ON c.submissionid = s.submissionid INNER JOIN login l ON l.loginid = c.loginid group by l.username order by count (s.submissionid) limit 10;
Спасибо,
Ринсон К.Э. администратор базы данных 91 + 9995044142 www.qburst.com
select
l.username,
s.submissions,
c.comments
from
l,
(
select
count(s.submissionid) as submissions,
s.loginid
from
submission s
group by
s.loginid
) s,
(
select
count(c.commentid) as commentids,
c.loginid
from
comment c
group by
c.loginid
) c
where
l.loginid = s.loginid and
l.loginid = c.loginid
order by
s.submissions desc
limit
10