2017-02-11 2 views
0

Ich baue eine Sammlung Website, eine der Dinge, die ich im Moment bin auf eine Abfrage ist, der zählt, wie viele Spiele ein bestimmte Benutzer in einer Reihe hat, dass etwas funktioniert und dies die folgenden Abfrage ausgibt:Anzahl der Tabelle Get abgesehen, wo Klausel

<table style="width:100%;text-align:center"> 
 
    <tr> 
 
    <th>user_account_id</th> 
 
    <th>series_id</th> 
 
    <th>Name</th> 
 
    <th>COUNT(g.id)</th> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>7</td> 
 
    <td>Halo</td> 
 
    <td>2</td> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>11</td> 
 
    <td>Call of Duty</td> 
 
    <td>6</td> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>3</td> 
 
    <td>Forza</td> 
 
    <td>3</td> 
 
    </tr>  
 
</table>

SELECT uc.user_account_id, 
    g.series_id, 
    gs.name, 
    COUNT(g.id) 
FROM user_collections uc 
LEFT JOIN games g 
ON g.id = uc.game_id 
LEFT JOIN games_series gs 
ON gs.id = g.series_id 
WHERE uc.user_account_id = 1 
GROUP BY(g.series_id) 

ich versuche, herauszufinden, wie eine vollständige Zählung der alle Zeilen aus meiner games Tabelle bereitgestellt basierend auf series_id Informationen erhalten in die S ELECT Teil meiner Abfrage. Anstatt also die Ausgabe, wäre dies:

<table style="width:100%;text-align:center"> 
 
    <tr> 
 
    <th>user_account_id</th> 
 
    <th>series_id</th> 
 
    <th>Name</th> 
 
    <th>COUNT(g.id)</th> 
 
    <th>Full Count</th> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>7</td> 
 
    <td>Halo</td> 
 
    <td>2</td> 
 
    <td>10</td> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>11</td> 
 
    <td>Call of Duty</td> 
 
    <td>6</td> 
 
    <td>12</td> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>3</td> 
 
    <td>Forza</td> 
 
    <td>3</td> 
 
    <td>8</td> 
 
    </tr>  
 
</table>

Ich habe versucht, eine Unterauswahlabfrage zu tun, aber es sieht aus wie Sie nicht eine WHERE-Klausel aus der Säule einer Basis tun können Wählen Sie die Abfrage aus, damit ich nicht sicher bin, wohin ich von hier aus gehen soll.

Jede Hilfe wäre willkommen. Vielen Dank!

+1

zu verwenden Was ist 'Voll Count'? Wie unterscheidet es sich von der "COUNT"? –

+0

'COUNT (g.id)' ist, wie viele Benutzer in ihrer Sammlung hat. 'Full Count' ist, wieviele Benutzer _could_ in ihrer Sammlung haben kann. – JTP

Antwort

1

Eine Möglichkeit ist es, eine correllated Unterabfrage in der SELECT-Klausel

SELECT uc.user_account_id, 
    g.series_id, 
    gs.name, 
    COUNT(g.id), 
    (SELECT COUNT(*) FROM games g1 WHERE g1.series_id = gs.id) as `Full Count` 
FROM user_collections uc 
JOIN games g 
ON g.id = uc.game_id 
JOIN games_series gs 
ON gs.id = g.series_id 
WHERE uc.user_account_id = 1 
GROUP BY(g.series_id) 
+0

Oh, großartig! Danke, daran habe ich nie gedacht! Ihr Code funktioniert gut, aber ich musste 'g1.series_id = gs.series_id' in' g1.series_id = g.series_id' ändern. – JTP

+0

Sie haben Recht - es gibt keine 'gs.series_id'. Aber 'gs.id' sollte auch funktionieren. –

+0

@JTP Ich habe auch LINKE VERBINDUNGEN zu INNEREN VERBINDUNGEN geändert. LEFT JOIN macht keinen Sinn mit 'GROUP BY (g.series_id)'. –