Salut,
Ta clause where me semble bizarre :
where (n.id=c.idnews or n.id<>c.idnews)
Là, tu cherches toutes les news, quel que soit leur id...
Peut-être que :
where n.id=c.idnews
seulement, ce serait mieux... Non ? Ca, c'est une jointure gauche implicite.
Sauf que... Effectivement, MySQL ne sera pas capable de ne compter que les commentaire pour chaque news, s'il doit toutes les récupérer.
Il faudra alors faire une requête par news, pour compter le nombre de commentaires.
Une autre méthode consiste à stocker dans un champ de chaque news le nombre de commentaires qu'elle a reçus.
Il faut mettre à jour ce champ à chaque fois qu'un commentaire est posté, et à chaque fois qu'un commentaire est supprimé.
Si tu contrôles parfaitement ce compteur, il sera toujours juste et tu le récupèreras dans la requête avec l'id de la news, son contenu, etc, et ce, sans frais supplémentaire (performances).
Tu peux aussi le recalculer de temps en temps pour chaque news, pour t'assurer qu'il est correct (en faisant une requête de type SELECT COUNT pour chaque news, et en modifiant sa valeur si besoin).
D'un point de vue purement théorique, cette approche n'est pas très conforme ; mais du point de vue du développeur, elle est très économe en traitements (et largement utilisée : c'est une sorte de mise en cache).
Neige
N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...