0
votes

Les rails rejoignent et filtrent par des identifiants de modèle primaire

Pourquoi ces deux requêtes produisent-elles des résultats différents?

FbGroup.where('fb_groups.id IN (?)', ids).length
> 300

FbGroup.joins(:fb_posts).where('fb_groups.id IN (?)', ids).length
> 500


0 commentaires

3 Réponses :


0
votes

Pourquoi ces deux requêtes produisent-elles des résultats différents?

La jointure peut entraîner des enregistrements 1: N (un à plusieurs). Par exemple. Si un fbgroup a deux FBPost , vous obtiendrez deux enregistrements lorsque vous vous joignez.

Le résultat souhaité est de rejoindre FB_Posts mais avant de rejoindre, je voudrais filtrer FB_Groups par des ID spécifiques. Comment puis-je faire ça?

Votre deuxième requête fait déjà cela. Lorsque vous filtrez avec la jointure ou rejoindre, puis filtrez dans une requête extérieure, vous obtiendriez toujours les mêmes résultats.


0 commentaires

0
votes

Mon résultat souhaité est de rejoindre fb_poststs code> mais avant de rejoindre, je voudrais filtrer fb_groups code> par des ID spécifiques. Comment puis-je faire ça? P>

J'ai utilisé fb_groups code> avec ID code> 1 code>, 2 code> et 3 code> juste pour Exemple P>

FbGroup.where(id: [1, 2, 3]).joins(:fb_posts).count


0 commentaires

0
votes

Je pense que c'est une duplication des enregistrements dans des jointures. Vous devriez utiliser groupe_by avec des jointures pour l'éliminer. Essayez, xxx

veuillez corriger si je me trompe.


0 commentaires