IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

count sur un select


Sujet :

Ruby on Rails

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 31
    Points : 25
    Points
    25
    Par défaut count sur un select
    Bonjour a tous,

    J'ai une petite question Ruby,
    en fait je fait la requete suivante:
    Channel.find_by_sql("select count(*) as nb from channels mss where true and mss.type_id in (1,2,3,5) order by ' mss.number ASC, mss.created_on DESC '")

    elle me retourne ca:
    [#<Channel:0xb76a1834 @attributes={"nb"=>"28"}>]

    Je veux recupérer la valeur de "nb".

    pourraez-vous, svp m'aider!!!

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    si on prends ça :

    toto = ta_requete

    normalement, toto.nb devrait te permettre d'accéder à ta valeur
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    merci pour ta reponse,

    mais je suis pas assez debutant d'avoir oublier de tester ca ,

    voila le retour de ce que tu as dit:

    NoMethodError: undefined method `nb' for [#<Channel:0xb76a1834 @attributes={"nb"=>"28"}>]:Array
    from (irb):24

  4. #4
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    edit : bon, je dit que des anneries

    toto.first.nb est LA réponse
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    le toto['nb'] me donne ca:

    TypeError: can't convert String into Integer
    from (irb):7:in `[]'
    from (irb):7


    On est bien d'accord, si on fait un select sur les champs d'une table, et on fait toto.column, ca doit marcher.
    Mais dans notre cas le count(*) n'est pas consultable, c'est génant...

    Encore en recherche de la solution

  6. #6
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    j'ai édité mon post, je ne disait que des bêtises

    c'est parceque le find_by_sql fonctionne comme un find :all, il retourne un tableau d'enregistrements. Il faut donc sélectionner un enregistrement avant d'accéder à ses valeurs

    cela dit, pourquoi ne pas utiliser un count_by_sql ?

    count_by_sql(sql)

    Returns the result of an SQL statement that should only include a COUNT(*) in the SELECT part.

    Product.count_by_sql "SELECT COUNT(*) FROM sales s, customers c WHERE s.customer_id = c.id"
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  7. #7
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    à titre d'info, voici la différence entre le count_by_sql et le find_by_sql dans ton cas :

    >> Toto.find_by_sql("select count(*) as nb from totos")
    => [#<Profile:0x4f8f88c @attributes={"nb"=>"23"}>]
    >> Toto.count_by_sql("select count(*) from totos")
    => 23
    >>
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    merci pour ta reponse,

    Bon, la je suis dans une situation ou je oeux pas changer le find_by_sql, trop d'impact sur le travail.
    Donc je suis obligé d'extraire mon info du resultat retourné par find_by_sql.

    En plus, je pense qu'il y une solution de la recuperer

  9. #9
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    je te l'ai donnée la solution pour le récupérer :

    toto.first.nb

    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Un grand merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Faire un SELECT COUNT sur une clé primaire composée de 3 colonnes
    Par z_ahlam dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/01/2023, 14h04
  2. Union et Count sur 2 select
    Par omelhor dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/12/2011, 17h07
  3. Réponses: 3
    Dernier message: 04/02/2010, 11h30
  4. Problème sur un SELECT COUNT(*)
    Par Aulanh dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/01/2010, 14h46
  5. select count (*) sur 3 tables
    Par jbidou88 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/05/2008, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo