Запрос на присоединение не работает

0

Я использую три таблицы 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>";
Теги:

3 ответа

1
Лучший ответ
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
  • 0
    Спасибо ... кажется, что отображаются только логины, в которых есть хотя бы один идентификатор. Как я могу отображать логины, в которых нет идентификаторов?
  • 0
    Правильно, затем замените JOIN на LEFT JOIN.
Показать ещё 2 комментария
1

В вашем запросе вы выбрали не-групповые элементы, такие как 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

0
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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню