Je doet een INNER JOIN, maar je hebt een OUTER JOIN nodig, in het bijzonder een LEFT JOIN. Bij een LEFT JOIN wordt de tabel "aan de linkerkant" altijd samengevoegd, en als er geen overeenkomst is, worden de velden van de tabel aan de rechterkant op nul gezet. Het verschil wordt heel goed uitgelegd in deze wikipedia-pagina .
Vervolgens moet je de rijen groeperen met dezelfde inzendings-ID en tellen hoeveel rijen er zijn gegroepeerd, waarbij je ervoor zorgt dat als een inzending slechts één opmerking heeft en een andere geen, ze allebei 1 gegroepeerde rij hebben... Als een inzending geen opmerkingen heeft , in de volgende zoekopdracht c.submissionid
zal null zijn, dus
Uw SQL zou kunnen zijn
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
Er kunnen fouten zijn, ik heb de query niet getest... Maar ik hoop je het juiste idee te hebben gegeven, dat is het verschil tussen outer joins en inner joins.