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

Requêtes MySQL Discussion :

Plusieurs Select Count Select [MySQL-5.6]


Sujet :

Requêtes MySQL

  1. #21
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    heu... sujet résolu peut-être, mais cette partie de la requête est invalide :

    AND N_TFONC LIKE "ASSISTANT COMMUNICATION" .

    d'une part le délimiteur de chaînes de caractères n'est pas le bon (guillemet à la place des simples quotes) et d'autre part, un recherche générique avec l'opérateur LIKEdoit utiliser des wildcard '%' ou '_'

  2. #22
    Membre à l'essai
    Femme Profil pro
    Développeuse Web et Mobile
    Inscrit en
    Août 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Développeuse Web et Mobile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    là j'avais mis un exemple pourris dans ma requete generale je l'ai enlever
    ça c'est un critère que l'utilisateur ajoute et comme maintenant tout est récupérer par la base je peux mettre un = à la place du LIKE
    quant au " je suis obligée car dans la base des valeurs ont été rentrée avec ' pour les noms de fonction (y en a trop impossible à changer à la main)

  3. #23
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Citation Envoyé par Ayumu2a Voir le message
    en fait je n'obtiens la bonne valeur que si je fais par GROUP BY C_TSERV4 donc si ça fonctionne avec c'est que je suppose que même par N_TFONC c'est la bonne valeur.


    EDIT: Je crois que moi aussi j'ai besoin de vacances xD faut grouper par C_BPERS et la j'ai tout ce qui me faut

    Merci en tout cas, des jours entiers que je m'arrachais la tête avec cette requête.
    On voit aussi la limite de MySQL concernant le respect des normes, car la deuxième requête est invalide. Il faudrait regrouper par N_TFONC, C_SOCIGRAD, N_TGRAD, N_TTEMPS, N_TSEXE, N_TSERV4, N_BORGA, N_TTHEM.

    Tatayo.

  4. #24
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Ayumu2a Voir le message
    quant au " je suis obligée car dans la base des valeurs ont été rentrée avec ' pour les noms de fonction (y en a trop impossible à changer à la main)
    En ce cas il faut "échapper" les caractères qui vous gênent, car les guillemets servent à délimiter les noms d'objets SQL au risque de résultats incohérents !

  5. #25
    Membre à l'essai
    Femme Profil pro
    Développeuse Web et Mobile
    Inscrit en
    Août 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Développeuse Web et Mobile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Bah le truc c'est que dans la base de données y a plus de 80k de lignes je peux pas m'amuser à chercher toutes celles qui contiennent une apostrophe

  6. #26
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Bonjour,

    Rien à voir entre ce que la colonne peut contenir et l'évaluation d'une constante.

    Et vous le savez bien car vous avez mixé les écritures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      AND C_TSERV4 IN('HB1CAB1','HB2CAB3','HB2CAB4','HB2CAB1','HB2CAB6','HE2ASS4','HE2ASS6','HE2ASS2','HE2ASS3','HJ2INF2','HP2POP6','HH1DIR1') 
      AND N_TFONC LIKE "ASSISTANT COMMUNICATION"
    Ce qui est valable pour une conditionnelle est aussi valable pour l'autre.

    Vu qu'il n'existe pas de colonne "ASSISTANT COMMUNICATION" ce n'est pas la bonne syntaxe.

    Donc la remarque d'escartefigue est sans appel.
    Le savoir est une nourriture qui exige des efforts.

  7. #27
    Membre à l'essai
    Femme Profil pro
    Développeuse Web et Mobile
    Inscrit en
    Août 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Développeuse Web et Mobile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    J'ai du mal à voit comment faire
    dans la colonne N_TFONC je peux avoir des noms style CHEF D'EQUIPE 3D qui sont déjà en base donc comment je peux prévoir l'échappement ?

  8. #28
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Bonjour,

    pour faire une requête permettant de filtrer quand la colonne N_TFONC vaut CHEF D'EQUIPE 3D il suffit d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND N_TFONC = 'CHEF D''EQUIPE 3D'
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND N_TFONC = Quote('CHEF D''EQUIPE 3D')
    Le savoir est une nourriture qui exige des efforts.

  9. #29
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Bonjour

    Citation Envoyé par Ayumu2a Voir le message
    comment je peux prévoir l'échappement ?
    C'est bien l'objet de la remarque sur le mélange des écritures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      AND C_TSERV4 IN('HB1CAB1','HB2CAB3','HB2CAB4','HB2CAB1','HB2CAB6','HE2ASS4','HE2ASS6','HE2ASS2','HE2ASS3','HJ2INF2','HP2POP6','HH1DIR1') 
      AND N_TFONC LIKE "ASSISTANT COMMUNICATION"
    Comment savoir que la colonne C_TSERV4 ne contient pas de valeurs comportant des apostrophes ?
    Le savoir est une nourriture qui exige des efforts.

  10. #30
    Membre à l'essai
    Femme Profil pro
    Développeuse Web et Mobile
    Inscrit en
    Août 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Développeuse Web et Mobile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Parce que ce sont des codes donc il n'y aura pas d'apostrophe contrairement à N_TFONC qui n'est que du texte

  11. #31
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Bonjour,
    Citation Envoyé par Ayumu2a Voir le message
    Parce que ce sont des codes donc il n'y aura pas d'apostrophe
    Ah, et il faut avoir cette connaissance colonne par colonne pour pouvoir faire une requête SQL ?
    Avec le temps qui passe je m’aperçois que ça devient plus subtile de coder en SQL.
    Ou alors un de nous a tord...

    Au passage, comment les robots, type ORM, font pour générer du SQL automatiquement ?
    Le savoir est une nourriture qui exige des efforts.

  12. #32
    Membre à l'essai
    Femme Profil pro
    Développeuse Web et Mobile
    Inscrit en
    Août 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Développeuse Web et Mobile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    En vrai la base est une horreur quand on m'a mis ça entre les mains j'ai pris peur xD
    pas de clé étrangère, des champs vides et inutiles, de la redondance et j'en passe sans parler du contenu qui parfois n'a ni queue ni tête...
    c'est un export d'un logiciel qui date de Mathusalem lol
    C'est pour ça que c'est très casse-tête.
    Même le site web qui utilise la base c'est la cata, celui qui l'a fait est un peu de la vieille école tout en utilisant des technos récentes donc ça devient vite le bordel.
    Mais en gros là moi ce que je dois faire c'est ajouter les AND en fonction de ce que l'utilisateur ajoute donc ça va etre une liste déroulante avec fonction, statut, grade, categorie et chacun de ces éléments donne sur une autre liste déroulante qui permet de choisir pour chaque et ces select sont remplis via la base (j'ai déjà codé tout ça).

    Citation Envoyé par Michel.Priori Voir le message
    Au passage, comment les robots, type ORM, font pour générer du SQL automatiquement ?
    De quoi tu parles ? Je vois pas le rapport avec des robots. C'est un site sur un réseau interne, donc si tu parlais des robots qui analysent les sites pas besoin vu qu'il ne sera jamais publique.
    Moi là je ne faisais que préparer les requêtes que j'allais utiliser pour l'afficher de mes données en fonctions de certains critères.
    Si j'avais tout créer de 0 j'aurai pas du tout fait comme ça mais je suis obligée de m'adapter

  13. #33
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Citation Envoyé par Ayumu2a Voir le message
    De quoi tu parles ?
    De syntaxe SQL.
    Le savoir est une nourriture qui exige des efforts.

  14. #34
    Membre à l'essai
    Femme Profil pro
    Développeuse Web et Mobile
    Inscrit en
    Août 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Développeuse Web et Mobile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Je la crée moi la requête mais le contenu de N_TFONC est déjà en base et le nom que je teste c'est celui que je récupère depuis la base c'est pour ça que je ne peux faire \' je récupère le nom tel quel. Comme les fonctions ne sont pas appeler via une fonction mais via la colonne N_TFONC qui est dans la même table que le reste qui contient plus de 80k d'enregistrements c'est galère à modifier.

  15. #35
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Bonjour,

    Mais pourquoi diable est-ce compliqué de comprendre les éléments de syntaxe ?
    ' ' (entre cote) : permet d'écrire un littéral
    " " (entre double cote) : permet de d'écrire le nom d'un objet quand celui-ci comporte des caractères interdits ou reprend le nom d'un objet système

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select 'c''est mon message' as Msg, 'moa' as "From", 'p''ou toa' as "TO" ;
    Le problème que je crois comprendre est que tu veux faire du SQL dynamique - cad - créer par assemblage de chaine, dans un requête SQL, un ordre SQL qui sera lui même exécuté par la suite.
    C'est par exemple le cas si tu veux créer autant de vue qu'il existe de valeur distinctes dans la colonne N_TFONC.
    Est-ce cela ton besoin ?

    Tel que tu l'as exposé, ton besoin est d'écrire à la main une clause WHERE juste.
    Et oui il faut pour cela faire un peu plus de travail après l'opération de copier/coller ; à savoir doubler le caractère de séparateur de chaine.

    Sans le savoir tu viens d'ouvrir une conversation qui est l'une des bases de la codification : la reconnaissance des balises.
    En admettant qu'on ait le choix entre ' et ", comment écrit-tu un select qui affiche ce littéral :
    Et là il m'a dit "MERDE" et puis il est parti.
    Le savoir est une nourriture qui exige des efforts.

  16. #36
    Membre à l'essai
    Femme Profil pro
    Développeuse Web et Mobile
    Inscrit en
    Août 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Développeuse Web et Mobile
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2014
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Voilà mon code js si ça te permet de mieux comprendre :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    var req2 = " AND ";
          var nomchamp = "";
          var nbCritere=$(".selectCritere").length;
          if(nbCritere>0){
            for(var i = 0; i<nbCritere;i++){
              var selectValue = $("#critereSelect"+i).val();
              var j = i-1;
              if((j)<0){
                j = 0;
              }
              var selectOpe = $('#EtOu'+j).val();
     
              var idText = "";
     
              var selectValue2;
     
              if (selectValue ==  "CATEGORIE"){
                idText = "categorieSelect"+i;
                nomChamp = "C_SOCIGRAD"
              }else if(selectValue == "FONCTION"){
                idText = "fonctionSelect"+i;
                nomChamp = "N_TFONC";
              }else if(selectValue == "STATUT"){
                idText = "statutSelect"+i;
                nomChamp = "N_TTEMPS";
              }else if (slectValue == "GRADE"){
                idText = "gradeSelect"+i;
                nomChamp = "N_TGRAD";
              }
              selectValue2 =  $("#"+idText).val();
     
              if (nbCritere == 1){
                req2 += ' ' + nomChamp+ ' = "' +selectValue2+'"';
              }else{
                req2 += ' ' +selectOpe +' '+ nomChamp+ ' = "' +selectValue2+'"';
              }

    dans une autre fonction j'ai :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var requeteOption = recupDataOption(); //ce qu'il y a en haut
          var requeteBase = "SELECT N_TFONC as FONCTION, C_SOCIGRAD as CATEGORIE, N_TGRAD as GRADE, N_TTEMPS as STATUT, N_TSEXE as SEXE, N_TSERV4 as POLE, N_TTHEM as DOMAINE, RH_HISTPERS.N_BORGA as ORGANISME, sum(J_REAL) as NBJours FROM RH_HISTPERS WHERE DATDEBSTAG >'$DEBUTSTAG' AND DATFINSTAG < '$FINSTAG' AND C_TTYPE <> '10004' AND C_TSERV4 ";
     
          //var choixCollectivite = "='" + collectivite +"'";//VILLE ou CAPA
          var choixCollectivite2 = "IN('HB1CAB1','HB2CAB3','HB2CAB4','HB2CAB1','HB2CAB6','HE2ASS4','HE2ASS6','HE2ASS2','HE2ASS3','HJ2INF2','HP2POP6','HH1DIR1')"; //code pouvant varier en fonction d'un autre select
     
          var requete = requeteBase + choixCollectivite2+ requeteOption + " GROUP BY N_TFONC";

    Après j'envoi la requete en ajax

  17. #37
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Et dans cette autre fonction, il y a encore un regroupement GROUP BY incohérent avec la clause SELECT.
    Chacune des colonnes non regroupées va donc avoir une valeur non représentative du critère de regroupement, ça n'a aucun sens fonctionnellement et seul MySQL autorise cette entorse à la norme.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [A-00] Count(Distinct) avec plusieurs Select et Group by...
    Par Thomak dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 30/10/2008, 11h11
  2. Procédure stockée avec plusieurs SELECT
    Par amatollah dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/03/2006, 21h26
  3. Evenement Jlist plusieurs selection
    Par Blast dans le forum Composants
    Réponses: 1
    Dernier message: 16/03/2006, 17h44
  4. plusieurs selections selon sur colonne different critere
    Par richton95 dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/01/2006, 17h25
  5. Plusieurs SELECT dans l'ouverture d'une connection
    Par pmboutteau dans le forum ASP
    Réponses: 6
    Dernier message: 01/04/2005, 11h09

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