2010-10-25 4 views
1

J'avons ajouté une fonctionnalité comme à une base de données entrées ... voici la structure du DB:Récupération comme compte sur les entrées de SQL

**Users** 
user_id 
user_name 
etc. 

**Entries** 
entry_id 
entry_content 
etc. 

**Likes** 
user_id 
entry_id 

(Il est un peu plus compliqué que cela, il y a groupes/catégories, mais cela ne devrait l'expliquer bien ...) Voici la requête SQL Je travaille avec au moment:

SELECT 
entries.*, 
DATE_FORMAT(entry_date, "%M %D, %Y") as entry_date, 
groups.group_short_name, 
users.user_name, users.user_id, 
FROM entries 
INNER JOIN groups ON groups.group_id = entries.group_id 
INNER JOIN users ON users.user_id = entries.user_id 
ORDER BY entry_date DESC 

J'essaie de récupérer aussi aime par entrée avec cette requête et je me demandais si c'est possible. J'ai essayé:

COUNT(DISTINCT likes.like_id) as likes 

avec

LEFT JOIN likes ON likes.entry_id = entries.entry_id 

Mais je ne pense pas que ce soit partout près de droite. Suis-je loin? Est-ce possible? J'espère que tout cela a du sens.

Merci pour l'aide à l'avance.

Répondre

1

Donnez vos alias de tables, pour une ..

FROM entries e 

Ensuite, ajoutez une requête de la colonne:

select e.*, (select count(*) from Likes where entry_id = e.entry_id) as entry_likes 
+0

Très cool. Je n'avais pas réalisé que ça pouvait être si simple. Merci! –

+0

Oups frappé entrer trop vite ... se demandant simplement, pourquoi devrais-je besoin de donner mes alias de tables? Est-ce si grave d'écrire des 'entrées' au lieu de 'e' à chaque fois? Je le fais seulement quelques fois ... –

+0

@Ian Je le fais toujours pour un certain nombre de raisons .. Il rend l'écriture des requêtes plus facile, vous êtes plus informé et précis lors de la création de jointures et de sous-requêtes, et je n'ont pas trouvé une bonne raison de ne pas le faire. :) – Fosco

0

Ajouter:

GROUP BY entries.entry_id 

voir si cela fonctionne.