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 :

Bloque sur une requète mysql


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Par défaut Bloque sur une requète mysql
    Bonjour,
    j'ai une table avec un champ avec des chiffres et un champ avec des dates.
    j'aimerai sortir le chiffre ou il y en a le plus des mêmes chiffres entre deux dates
    j'ai fais ceci mais ça ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(ann_uti_id)_id from annonce WHERE ann_date >= '$sDateDebutmoisprecedent' and ann_date <= '$sDateFinmoisprecedent' group by ann_uti_id order by count(*) desc limit 1
    si j'enlève le WHERE il me sort le nombre ou il y en a le plus mais pas le chiffre ou il en a le plus et si je met le WHERE il me sort rien pourtant les dates existes?
    merci

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 589
    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 589
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    tout ceci est bien confus :

    Citation Envoyé par pascb423 Voir le message
    j'ai une table avec un champ avec des chiffres et un champ avec des dates.
    D'une part il n'y a pas de champs dans les tables, il y a des colonnes.
    D'autre part, que voulez-vous dire par "des chiffres" et "des dates" ? Faut-il comprendre que la même colonne peut contenir plusieurs valeurs numériques ou plusieurs valeurs dates.
    Si c'est le cas, vous allez au devant de grandes difficultés, à corriger d'urgence si possible !
    Communiquez un exemple de contenu de chacune des deux colonnes pour plus de clarté.



    Citation Envoyé par pascb423 Voir le message
    j'aimerai sortir le chiffre ou il y en a le plus des mêmes chiffres entre deux dates
    No comprendo amigo
    Un exemple pourrait aider à comprendre le besoin



    Citation Envoyé par pascb423 Voir le message
    j'ai fais ceci mais ça ne marche pas :
    "ça ne marche pas", mais encore ? Un message d'erreur... lequel ? Un résultat différent de celui attendu... lequel ?



    Citation Envoyé par pascb423 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(ann_uti_id)_id from annonce WHERE ann_date >= '$sDateDebutmoisprecedent' and ann_date <= '$sDateFinmoisprecedent' group by ann_uti_id order by count(*) desc limit 1
    Un minimum de mise en forme dans la présentation des requêtes facilite la relecture
    Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT count(ann_uti_id)_id 
    from annonce 
    WHERE ann_date >= '$sDateDebutmoisprecedent' 
      and ann_date <= '$sDateFinmoisprecedent' 
    group by ann_uti_id 
    order by count(*) desc
    limit 1
    Et là, on se rend compte que
    - vous encadrez les variables avec des quotes, du coup elles sont traitées comme des chaînes de caractères !
    - vous utilisez un GROUP BY inutile
    - vous utilisez un ORDER BY inutile
    - vous utilisez une clause LIMIT inutile

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Par défaut
    merci pour la réponse voici une capture des colonnes
    non, 1 colonne contient les chiffres et l'autre les dates, c'est pas mélangé.
    Nom : Capture.PNG
Affichages : 115
Taille : 137,4 Ko
    avec un select j'aimerai sortir le chiffre de la colonne ann_uti_id qui contient le plus du même chiffre entre 2 dates.
    oui, effectivement je pense que ma requête n'est pas juste?

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 589
    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 589
    Billets dans le blog
    10
    Par défaut
    Du coup ceci si je comprends le besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select ann_uti_id
         , count(*)
    from annonce
    where ann_date between @dtdeb and @dtfin
    group by ann_uti_id
    order by count(*) desc
    limit 1
    ;
    Il y a d'autres solutions si vous utilisez MySQL V8

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Par défaut
    merci, mais je crois que le problème vient que mes dates sont en varchar et non date mais je crois que je peux utiliser strtotime pour les transformer?

    j'utilise ce code pour retourner les dates début et de fin:
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $date = date("Y-m-t");
      $sDateDebutmoisprecedent = date("Y-m-01 ", mktime(0,0,0,date("m"),0,date("Y")));
      $sDateFinmoisprecedent = date("Y-m-d ", mktime(0,0,0,date("m"),0,date("Y")));
      $debutmoisencours=date("Y-m-01", mktime(0, 0, 0, date("m"), 1, date("Y") ));
      $dernierjourmoisencours= date("Y-m-t", strtotime($date));

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 589
    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 589
    Billets dans le blog
    10
    Par défaut
    il est nettement préférable de changer le type des colonnes. Quelle idée d'avoir choisi du (var)char pour des dates
    - encombrement supérieur à celui d'une type date
    - date non fiabilisée par le SGBD, porte ouverte à un contenu hasardeux
    - aucune fonction date n'est utilisable directement, sauf à passer par un transtypage au risque d'un plantage en cas de contenu erroné
    - performances dégradées, surtout avec du varchar

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Par défaut
    oui, vous avez raison je ne sais pas ce que j'ai foutu?
    savez-vous si il est possible dans la table de mettre les dates au format européen car elles sont au format américain

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2020
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2020
    Messages : 32
    Par défaut
    Pour un sgbd un type date reste un type date et sera toujours stocké de la même manière.

    Il est à votre charge et selon les besoins de formater la date lors de son extraction.

    https://www.w3schools.com/sql/func_m...ate_format.asp

    Ainsi si vous voulez obtenir une date au format "français"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DATE_FORMAT(ma_date,'%d/%m/%Y')

  9. #9
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 817
    Par défaut
    Salut à tous.

    Voici un exemple de ce que vous cherchez à faire.
    J'ai volontairement décomposé la requête afin de vous montrer le résultat intermédiaire et comment extraire ce maximum.
    Code : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    create table `test`
    (  `id`     integer unsigned not null auto_increment primary key,
       `val`    integer          not null,
       `date`   date             not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`val`,`date`) values
      (1, '2020-07-01'),
      (2, '2020-07-05'),
      (3, '2020-07-08'),
      (1, '2020-07-02'),
      (2, '2020-07-06'),
      (2, '2020-07-03'),
      (3, '2020-07-07')
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+-----+------------+
    | id | val | date       |
    +----+-----+------------+
    |  1 |   1 | 2020-07-01 |
    |  2 |   2 | 2020-07-05 |
    |  3 |   3 | 2020-07-08 |
    |  4 |   1 | 2020-07-02 |
    |  5 |   2 | 2020-07-06 |
    |  6 |   2 | 2020-07-03 |
    |  7 |   3 | 2020-07-07 |
    +----+-----+------------+
    --------------
    commit
    --------------
     
    --------------
    drop view if exists `req_1`
    --------------
     
    --------------
    create view `req_1` as
        select  val, count(*) as nbre
          from  `test`
         where  date between '2020-07-01' and '2020-07-06'
      group by  val
    --------------
     
    --------------
    select * from req_1
    --------------
     
    +-----+------+
    | val | nbre |
    +-----+------+
    |   1 |    2 |
    |   2 |    3 |
    +-----+------+
    --------------
    select val
    from req_1
    where nbre = (  select max(nbre) from req_1  )
    --------------
     
    +-----+
    | val |
    +-----+
    |   2 |
    +-----+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    @+

Discussions similaires

  1. [DEBUTANT] Besoin d'aide sur une requête Mysql
    Par Nerone21 dans le forum Requêtes
    Réponses: 3
    Dernier message: 05/09/2008, 13h01
  2. [MySQL] texte qui bloque sur une requéte mysql
    Par leto02 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/11/2007, 11h32
  3. problème sur une requête mysql
    Par atomikado dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/10/2007, 16h04
  4. besoin d'aide sur une requête mysql
    Par unmulot dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/07/2006, 13h17
  5. [ACCESS] Je bloque sur une requête...
    Par portu dans le forum Langage SQL
    Réponses: 8
    Dernier message: 16/02/2006, 10h33

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