2013-04-11 4 views
1

j'avais posé une question hier ici questionvaleur de retour SQL en tant que paramètre

Maintenant, je change mes codes comme ci-dessous

declare @like bit, @dislike bit 

IF EXISTS (select * from likeordislike 
      where comment_id = @comment_id and likevar = 1 and dislikevar = 0) 
BEGIN 
    SET @like = 'true' 
    SET @dislike = 'false' 
END 
ELSE IF EXISTS (select * from likeordislike 
       where comment_id = @comment_id and likevar = 0 and dislikevar = 1) 
BEGIN 
    SET @like = 'false' 
    SET @dislike = 'true' 
END 
ELSE 
BEGIN 
    SET @like = 'false' 
    SET @dislike ='false' 
END 

SELECT  
    comment_id, comment_post_id, comment_user_id, 
    comment_text, comment_like, comment_dislike, 
    comment_reply_to_id, comment_date, 
    @like as begendi, 
    @dislike as begenmedi 
FROM   
    comment 
ORDER BY 
    comment_date DESC 

Je suis en train de sélectionner des commentaires et des commentaires similaires ou ne pas aimer le statut. J'utilise un datalist sur ma page Web asp.net. J'ai besoin d'une valeur de retour par commentaire. Je dois donner @comment_id paramètre, cette requête renvoie le même résultat pour chaque commentaire (begendi = 1, begenmedi = 0). Comment puis-je résoudre ce problème?

ScopeIdentity ou une valeur de retour nécessaire? Merci (j'ai deux table de 1 commentaire, tableau 2-likeordislike qui a comment_id, user_id, likevar, dislikevar et colonnes EVENTDATE)

select * 
from likeordislike 
where comment_id = @comment_id and likevar = 0 and dislikevar = 1 

Répondre

1

Je ne sais pas exactement ce que vous essayez d'atteindre ici, mais je pense que vous pouvez obtenir le résultat que vous recherchez sans utiliser une approche procédurale et en utilisant simplement une jointure:

SELECT comment_id, 
     comment_post_id, 
     comment_user_id, 
     comment_text, 
     comment_like, 
     comment_dislike, 
     comment_reply_to_id, 
     comment_date, 
     begendi = CAST(CASE WHEN LikeOrDislike.Likes > 0 OR LikeOrDislike.Dislikes = 0 THEN 1 ELSE 0 END AS BIT), 
     begenmedi = CAST(CASE WHEN LikeOrDislike.Dislikes > 0 AND LikeOrDislike.Likes = 0 THEN 1 ELSE 0 AS BIT) 
FROM Comment 
     LEFT JOIN 
     ( SELECT Comment_ID, 
        Likes = COUNT(CASE WHEN LikeVar = 1 AND DislikeVar = 0 THEN 1 END), 
        Dislikes = COUNT(CASE WHEN LikeVar = 0 AND DislikeVar = 1 THEN 1 END), 
        Other = COUNT(CASE WHEN LikeVar = DislikeVar THEN 1 END) 
      FROM LikeOrDislike 
      GROUP BY Comment_ID 
     ) LikeOrDislike 
      ON Comment.Comment_ID = LikeOrDislike.Comment_ID 
ORDER BY comment_date DESC 
+2

'ISNULL' est une fonction à deux paramètres. Je suppose que vous vouliez avoir un ', 0' dedans. –

+0

Vous assumez correctement ... Plus de café requis pour moi. – GarethD

+0

tant merci @GarethD mais je n'essaie pas de sélectionner le nombre de goûts et de dégoûts.J'essaie de sélectionner déclaré 2 variable (begendi, begenmedi) de commentaire..Joint Join est peut-être juste, mais ce code sélectionnez le nombre de likes Suis-je faux ? – serdar

Questions connexes