J'ai des tables:
utilisateurs forts> p> messages strong> p> réactions strong> p> Les réactions ont des valeurs de 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>
{1: 'J'aime', 2: 'Dispose'} code> p>
blockquote> {
post_id: 1,
post: "Hello World",
image_path: "public/upload_123.png",
likes: 23,
dislikes: 18,
my_reaction: 1
}
3 Réponses :
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
Vous pouvez le faire en rejoignant les tables avec un joindre gauche code> (juste au cas où il n'y a pas de réaction pour un post), puis avec agrégation conditionnelle:
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 ^^
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