Vous faites un INNER JOIN, mais vous avez besoin d'un OUTER JOIN, en particulier un LEFT JOIN. Avec un LEFT JOIN, la table "à gauche" est toujours jointe, et s'il n'y a pas de correspondance, les champs de la table à droite sont mis à null. La différence est très bien expliquée dans cette page wikipedia .
Ensuite, vous devez regrouper les lignes avec le même identifiant de soumission et compter le nombre de lignes qui ont été regroupées, en prenant soin que si une soumission n'a qu'un seul commentaire et une autre n'en a pas, elles ont toutes les deux 1 ligne groupée... Si une soumission n'a pas de commentaires , dans la requête suivante c.submissionid
sera nul, donc
Votre SQL pourrait être
SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid,
IF(c.submissionid IS NULL, 0, COUNT(*)) AS countComments
FROM submission AS s
INNER JOIN login AS l ON l.loginid = s.loginid
LEFT JOIN comments AS c ON c.submissionid = s.id
GROUP BY (s.id)
ORDER BY s.datesubmitted DESC
LIMIT 10
Il peut y avoir des erreurs, je n'ai pas testé la requête... Mais j'espère vous avoir donné la bonne idée, c'est la différence entre les jointures externes et les jointures internes.