J'essaie d'écrire une déclaration ActiveCord sur laquelle je cherche tous les enregistrements où l'identifiant n'est pas présent dans une autre table ...
Quelle est la syntaxe? P>
@events = Event.find(:all, :include => :personals, :conditions => ["event.id != ? ", @user.personal.event_id ])
4 Réponses :
Je suppose que les relations sont les suivantes:
Event.find(:all, :conditions => ["events.id NOT IN (?)", @user.event_ids])
Cela ne générera pas deux commandes SQL - une qui collecte? @ user.event_ids code>, et celui qui fait
pas dans [tous ces identifiants] code> .. qui convient parfaitement pour de nombreux cas, mais s'il y a des centaines de milliers de
@ user.event_ids code>, alors quelque chose qui génère un SQL pur est préféré; à droite?
La solution présentée par Nuby est aussi correcte que jamais. Voici la même requête dans une syntaxe moderne, qui peut être utilisée dans des rails 3 et plus:
Event.where.not(id: @user.event_ids)
Cela générera une instruction massive (presque certainement illégale) sélectionnée dans laquelle les ID sont simplement inclus dans le texte. Vous avez vraiment besoin de quelque chose qui fait une jointure.
@JamesmoOore événement.Où.not (id: @ user.events.select (: id)) code>
Les autres réponses ne font pas d'échelle avec des centaines de milliers de dollars ou plus. Voici une solution pure SQL.
rails 5 +: p> Cela récupère tous les événements qui n'ont pas de personnel associé. P> rails 3+ : p>
Je ne pense pas que ce soit correct. J'ai compris qu'il voulait obtenir des entrées s'ils ne contiennent pas un certain identifiant. Cela saura également ceux qui ont juste un identifiant différent (l'identifiant doit être d'une manière ou d'une autre dans la requête)
Merci - tu as raison, j'ai mal interprété la question. Cette réponse "Événement donné a de nombreuses personnes, comment puis-je obtenir tous les événements qui n'ont aucune personne". Je vois maintenant la question: "L'événement donné a de nombreuses personnes et que l'utilisateur a de nombreuses personnes, comment puis-je obtenir tous les événements qui ne partagent aucune personne avec un utilisateur u".
meilleur que j'ai jusqu'à présent: produit SQL: p>
Obtenez-vous une erreur spécifique ou juste curieux si c'est la voie la plus efficace?
Une meilleure réponse peut être fournie si comment se déroulent les relations?