0
votes

Interrogation pour les comptes de réaction

J'ai des tables:

utilisateurs forts> p> xxx pré>

messages strong> p> xxx

réactions strong> p> xxx pré>

Les réactions ont des valeurs de {1: 'J'aime', 2: 'Dispose'} code> p> blockquote>

Maintenant, je veux obtenir tous les messages avec les comptes correspondants avec chaque réact. p>

Le résultat de fin serait comme suit: P>

{
post_id: 1,
post: "Hello World",
image_path: "public/upload_123.png",
likes: 23,
dislikes: 18,
my_reaction: 1
}


0 commentaires

3 Réponses :


0
votes

Exécutez simplement ce code ..

SELECT a.post_id, a.post,a.image_path,b.reaction,count(b.reaction) 
from posts a 
INNER join reactions b on a.post_id=b.post_id 
group by a.post_id, a.post,a.image_path,b.reaction


0 commentaires

1
votes

Vous pouvez le faire en rejoignant les tables avec un joindre gauche (juste au cas où il n'y a pas de réaction pour un post), puis avec agrégation conditionnelle: xxx


4 commentaires

C'est ça! Merci Monsieur!


Monsieur Que diriez-vous si je veux avoir ma réaction actuelle? Donc, il serait comme `` `` {post_id: 1, post: "bonjour monde", image_path: "publique / upload_123.123.fng", aime: 23, n'aime pas: 18, my_reaction: 1} `` ``


Quelle est ma réaction actuelle? La dernière réaction (par réaction_id) ou la dernière réaction d'un utilisateur spécifique?


L'utilisateur ne peut réagir qu'une fois pour chaque poste. Donc, je pensais à un moyen d'obtenir quelle réaction l'utilisateur a placé. Mais je l'ai eu maintenant monsieur, merci à votre logique ^^



0
votes

J'ai finalement obtenu la requête. Il va comme suit:

SELECT `posts`.`posts_id`, `users`.`user_id`, `posts`.`post`, `posts`.`file_path`, `posts`.`created_at`, `users`.`fname`, `users`.`mname`, `users`.`lname`, `r1`.`reaction`, IF(SUBSTRING_INDEX(posts.file_path, '.', -1) IN ('jpeg', 'jpg', 'png'), 'image', 'document') AS file_type, 
SUM(reactions.reaction = 1) AS likes, 
SUM(reactions.reaction = 2) AS hearts, 
SUM(reactions.reaction = 3) AS dislikes FROM `posts` 
LEFT JOIN `users` ON `posts`.`user_id` = `users`.`user_id` LEFT JOIN `reactions` ON `reactions`.`posts_id` = `posts`.`posts_id` 
LEFT JOIN `reactions` AS `r1` ON `r1`.`posts_id` = posts.posts_id AND r1.user_id = 1 WHERE `posts`.`deleted_at` IS NULL 
GROUP BY `posts`.`posts_id` 
ORDER BY `posts`.`created_at` DESC


0 commentaires