Sie machen einen INNER JOIN, aber Sie brauchen einen OUTER JOIN, insbesondere einen LEFT JOIN. Bei einem LEFT JOIN wird immer die "linke" Tabelle verknüpft und bei fehlender Übereinstimmung werden die Felder der rechten Tabelle auf null gesetzt. Der Unterschied wird auf dieser Wikipedia-Seite sehr gut erklärt .
Dann müssen Sie die Zeilen mit derselben Einreichungs-ID gruppieren und zählen, wie viele Zeilen gruppiert wurden, wobei darauf zu achten ist, dass, wenn eine Einreichung nur einen Kommentar hat und eine andere keinen, beide eine gruppierte Zeile haben ... Wenn eine Einreichung keine Kommentare hat , in der nächsten Abfrage c.submissionid
wird null sein, also
Ihr SQL könnte sein
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
Es können Fehler auftreten, ich habe die Abfrage nicht getestet... Aber ich hoffe, Ihnen die richtige Idee gegeben zu haben, das ist der Unterschied zwischen äußeren Joins und inneren Joins.