2010-05-30 2 views
0

J'essaye de créer une requête unique qui, semblable au débordement de pile, me donnera le nombre de votes, mais s'assurera également que l'utilisateur actuellement de visualisation peut 't upvote encore s'ils ont déjà upvoted.Vérifier une valeur unique dans un compte, mais obtenir tous les résultats

ma requête ressemble actuellement

SELECT cid, text, COUNT(votes.parentid) FROM comments LEFT JOIN votes ON comments.cid=votes.parentid AND votes.type=3 WHERE comments.type=0 AND comments.parentid='$commentParentid' GROUP BY comments.cid

Mais je suis complètement stumpted sur la façon d'ajouter le contrôle pour voir si l'ID utilisateur est dans la table des votes.

L'autre option est d'ajouter une requête séparée où

 
SELECT COUNT(*) FROM votes WHERE userid='$userid' AND parentid='$commentParentid' AND type=3 

Je suis juste de réaliser que je suis tellement perdu avec ce que je ne sais même pas vraiment ce que les étiquettes à fournir.

Répondre

1
SELECT cid, text, COUNT(votes.parentid), 
    COUNT(IF(votes.userid='$userid',1,NULL)) = 0 AS can_vote 
FROM comments 
LEFT JOIN votes ON comments.cid=votes.parentid AND votes.type=3 
WHERE comments.type=0 AND comments.parentid='$commentParentid' 
GROUP BY comments.cid 

Cela devrait vous donner un drapeau can_vote en fonction du nombre de fois que l'utilisateur a voté sur le commentaire, si vous insistez pour le faire cela dans SQL.

+0

Merci Iggy, Qui a très bien fonctionné, et ajouté très peu de temps à la requête (jusqu'à présent sur un petit ensemble de données). Par curiosité, la façon dont vous dites «si j'insiste à le faire en sql», y a-t-il une autre façon de le recommander? – pedalpete

+0

Vous avez essentiellement raison de vous soucier des performances, une seule requête complexe peut prendre plus de deux ou trois différentes et un certain nombre de calcul dans votre code. –

Questions connexes