0
votes

Sélectionnez les colonnes de table uniquement si elle correspond à certaines conditions

Rails 5.2 Ruby 2.6

Salut tout,

J'ai un modèle qui a le statut et la mise à jour_at créé_at Colonnes (a également peu d'autres colonnes). Les valeurs d'état possibles peuvent être "en attente", "Enroute", "Terminé".

Je veux interroger la table telle que:

  • Tous les enregistrements doivent venir avec statut en attente, en route et complétées.
  • Si le statut est "terminé", sa mise à jour_at doit être dans les dernières 24 heures.
    • Tous les autres enregistrements avec statut 'complété "avec différents horodatages ne doivent pas être sélectionnés. xxx

      Ce qui précède est une structure d'échantillon de la requête d'enregistrement actif. Cette requête n'imprime que les 24 heures seulement. Mais tous les autres statuts ne sont pas collectés.


11 commentaires

Qu'est-ce qui ne va pas si vous exécutez cette requête? S'il vous plaît ajouter le problème / la sortie à votre question


Les lignes avec statut en attente et enroulées ne sont pas sélectionnées.


Votre question / où la clause suggère que c'est l'intention ... non?


Oui. c'est une mauvaise requête. Ce dont j'ai besoin en tant que sortie est différent. c'est dans la description du problème


Votre requête selon votre question est correcte. Peut-être que vous formulez votre question de mauvaise question?


Je vois maintenant, mais vous voudrez peut-être reformuler votre question pour être plus clair ... et expliquer la sortie actuelle de la sortie attendue.


J'ai fait des changements. maintenant est-ce compréhensible?


Que se passe-t-il pour d'autres États? Pour ex: "en attente" suit également la même structure? I.e Seulement en attente avec mis à jour à l'intérieur des dernières 24 heures devrait venir et tous les autres objets avec l'état autre que "en attente" devraient venir?


non. Seul le statut terminé dans les 24 heures, ainsi que tous les enregistrements en route et en attente doivent venir


En bref, tous les enregistrements doivent être récupérés avec tous les statuts différents. Si le statut est terminé, seuls les enregistrements terminés que les enregistrements terminés, mis à jour au cours des dernières 24 heures, sont extraites avec l'enregistrement de statut en route et en attente.


Quels RDBM utilisez-vous?


3 Réponses :


1
votes
includes(Model2: [:model3, :model4, :model5, :model6])
               .where(conditions)
               .where('(Model1.status = ? AND Model1.updated_at > ?) OR ( Model1.status != ?)', "Completed", 24.hours.ago, "Completed")
               .order('Model1.created_at DESC')

0 commentaires

1
votes

Vous avez donc essentiellement besoin de cela:

Model.where('Completed', 24.hours.ago)
     .or(Model.where(status: ['pending', 'enroute']))


0 commentaires

0
votes

Vous pouvez suivre, xxx

ou vous pouvez passer par arel , xxx


0 commentaires