2010-09-20 6 views
0

J'ai besoin d'obtenir le nombre d'enregistrements du tableau «messages» où les votes> = 5 pour créer la pagination.Les enregistrements MySQL comptent avec la condition

tables:

«messages» de table: user_id, post_n, visibilité, type

valeurs de visibilité: 0, 1, 2; Les valeurs de type: 'text', 'photo' ... (il s `champ ENUM, ont 6 valeurs)

«votes»de table: vote_n, post_n, voter_id, vote

valeurs de vote: -1 ou 1

requête:

SELECT post_n, (SELECT SUM(vote) FROM votes WHERE votes.post_n=posts.post_n)AS votes 
FROM posts WHERE visibility=2 AND type='text' HAVING votes>=5 

temps 0,4039

Est-il possible d'optimiser?

Répondre

0

Je pense que vous obtiendriez de meilleurs résultats sans sous-requête. Vous pouvez le faire en utilisant GROUP BY:

SELECT p.post_n AS post_n, SUM(v.vote) AS votes 
FROM posts p 
INNER JOIN votes v ON (v.post_n = p.post_n) 
WHERE p.visibility = 2 AND p.type = 'text' 
GROUP BY p.post_n 
HAVING SUM(v.vote) >= 5 
+0

J'ai essayé, heure: 1.4446 – swamprunner7

Questions connexes