2010-03-22 3 views
0

Je crois que la requête ci-dessous devrait fonctionner. Cependant, quand je l'exécute, les résultats sont vierges. Je pense que cela se passe puisque pour l'instant, la table "commentaire" est vide. Il n'y a donc pas d'instance où s.smission = c.submissionid. Je voudrais avoir la requête ci-dessous pour travailler même s'il n'y a pas de s.smission qui équivaut à un c.submissionid. Dans ce cas, j'aimerais que countComments soit égal à zéro.Rendre un résultat de requête égal à zéro lorsqu'une condition est nulle

Comment est-ce que je peux faire ceci?

Merci à l'avance,

John

$sqlStr = "SELECT s.loginid, s.submissionid s.title, s.url, s.displayurl, l.username, count(c.comment) AS countComments 
      FROM submission AS s, 
        login AS l, 
        comment AS c, 
      WHERE s.loginid = l.loginid 
       AND s.submissionid = c.submissionid 
     GROUP BY s.loginid, s.submissionid s.title, s.url, s.displayurl, l.username 
     ORDER BY s.datesubmitted DESC 
      LIMIT 10";   


$result = mysql_query($sqlStr); 

$arr = array(); 
echo "<table class=\"samplesrec\">"; 
while ($row = mysql_fetch_array($result)) { 
    echo '<tr>'; 
    echo '<td class="sitename1"><a href="http://www.'.$row["url"].'">'.$row["title"].'</a></td>'; 
    echo '</tr>'; 
    echo '<tr>'; 
    echo '<td class="sitename2"><a href="http://www...com/sandbox/members/index.php?profile='.$row["username"].'">'.$row["username"].'</a><a href="http://www...com/sandbox/comments/index.php?submission='.$row["title"].'">'.$row["countComments"].'</a></td>'; 
    echo '</tr>'; 
    } 
echo "</table>"; 
+0

Avez-vous essayé une jointure externe? Je pense que vous obtiendrez un 1 au lieu de 0 si vous utilisez ce choix exact, mais vous pouvez changer le nombre ... pour le rendre correct. – MJB

+0

MJB, après avoir lu la question, j'ai essayé, mais la ligne n'apparaît pas dans le jeu de résultats pour moi. La réponse de a1ex07 fonctionne. – Ladlestein

Répondre

2
$sqlStr = "SELECT s.loginid, s.submissionid s.title, s.url, s.displayurl, l.username, count(c.comment) AS countComments 
     FROM submission AS s, 
       login AS l 
     LEFT JOIN comment AS c ON (s.submissionid = c.submissionid) 
     WHERE s.loginid = l.loginid    
    GROUP BY s.loginid, s.submissionid s.title, s.url, s.displayurl, l.username 
    ORDER BY s.datesubmitted DESC 
     LIMIT 10" 
+0

J'ai essayé ceci et cela n'a pas fonctionné. Le problème n'est pas la requête, mais il y aura de nombreuses instances où s.smission n'aura pas de c.submissionid correspondant. – John

0

Vous devez exécuter vos requêtes à la ligne de commande ou par quelque chose comme phpMyAdmin/HeidiSQL/etc. pour vous assurer que vous obtenez les bonnes données et la syntaxe est correcte.

Il vous manque quelques virgules, une après s.smission sur la ligne de sélection et à nouveau sur le groupe par ligne.

La requête d'a1ex07 devrait fonctionner si vous ajoutez les virgules manquantes.

Questions connexes