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

Langage SQL Discussion :

Problème avec SELECT MAX


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut Problème avec SELECT MAX
    Bonjour, j'ai un problème avec ma requête SELECT MAX qui doit taper sur deux tables, et elle ne marche pas la voici;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(numfacture) AS maxi FROM facture,clients WHERE datefacture BETWEEN '2008-01-01' AND '2008-01-31' AND clients.refnumsoc='1'
    qu'est ce qui ne va pas?

    Merci

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Il te manque une jointure entre les deux tables !
    Pas évident à voir avec ta requête pas vrai ?
    Alors adopte la bonne syntaxe pour les jointures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT a.col1, b.col2
    FROM a
    INNER JOIN b ON a.id = b.id
    Ce qui donne dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT MAX(f.numfacture) AS maxi
    FROM facture f
    INNER JOIN clients c ON f.[colonne de clé étrangère représentant le client dans la table facture] = c.refnumsoc 
    WHERE f.datefacture BETWEEN '2008-01-01' AND '2008-01-31'
    AND c.[colonne du nom du client] = [nom du client]
    Si tu fais la restriction (clause WHERE de la requête) directement sur le numéro du client, il n'y a plus besoin de la jointure et donc plus besoin de la table clients.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut
    Non ce n'est pas bon, désoler je me suis mal exprimé. Je doit gardé mon refnumsoc car dans les clients, il y a en deux sorte, il y en a qui appartiennent à une société et d'autres a une autre société, je me réfère comme sa. Le principe est que je dois avoir un numéro de facture qui part de 0 au début de chaque moi et qui s'incrémente au fur et à mesure, donc sa j'y arrive pas de soucis, mais le soucis c'est que je dois séparé les deux, exemple

    Société 1:
    facture N° 1
    facture N° 2
    facture N° 3


    Société 2:
    facture N° 1
    facture N° 2
    facture N° 3


    et pas les deux confondus, tu peux m'aider sa sera sympa, Merci.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Donne la structure de tes tables qu'on y voie un peu plus clair.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut
    Voila mes deux tables:

    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
    CREATE TABLE `clients` (
      `numclient` int(10) NOT NULL auto_increment,
      `numcat` int(3) unsigned default '1',
      `numville` int(6) unsigned default NULL,
      `codeclient` varchar(11) default NULL,
      `typeclient` int(3) default NULL,
      `groupeclient` tinyint(3) unsigned default NULL,
      `nomsoc` varchar(150) default NULL,
      `adresse` varchar(150) default NULL,
      `telephone` varchar(20) default NULL,
      `tel2` varchar(20) default NULL,
      `tel3` varchar(20) default NULL,
      `fax` varchar(20) default NULL,
      `titre` varchar(20) default NULL,
      `url` varchar(50) default NULL,
      `email` varchar(100) default NULL,
      `paiement` int(3) unsigned default '0',
      `commentaires` mediumtext,
      `valide` tinyint(1) unsigned default '1',
      `exempfacture` int(5) default NULL,
      `numintracomm` varchar(30) default NULL,
      `refsociete` varchar(30) default NULL,
      `refnumsoc` int(5) default NULL,
      PRIMARY KEY  (`numclient`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
     
     
     
    CREATE TABLE `facture` (
      `numid` int(6) unsigned NOT NULL auto_increment,
      `datefacture` date default NULL,
      `numfacture` int(6) unsigned default NULL,
      `numclient` int(5) unsigned default NULL,
      `codeclient` varchar(10) default NULL,
      `adresse` mediumtext,
      `tva` float(5,2) default NULL,
      `total` float(10,2) default NULL,
      `paiement` tinytext,
      `termine` tinyint(1) unsigned default '0',
      `regle` tinyint(1) unsigned default '0',
      `dateregle` date default NULL,
      `adateecheance` date default '0000-00-00',
      `modepaiement` varchar(30) default NULL,
      PRIMARY KEY  (`numid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;



    Voila, merci

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    1) Tu n'as pas besoin de répéter le codeclient dans la table factures puisque tu peux l'obtenir par jointure entre les deux tables.
    Tu peux te poser aussi la question pour 'adresse'. Je vois que cette colonne n'a pas le même type dans les deux colonnes. On peut supposer qu'il s'agit dans le second cas de l'adresse de facturation qui peut être différente de l'adresse du client. Tu pourrais externaliser les adresses dans une table séparée afin de les typer et récupérer la bonne adresse par jointure.

    2) Compliqué ton système de numérotation de facture !
    Le principe est que je dois avoir un numéro de facture qui part de 0 au début de chaque mois et qui s'incrémente au fur et à mesure
    Par contre j'ai pas trop compris ça :
    dans les clients, il y a en deux sorte, il y en a qui appartiennent à une société et d'autres a une autre société
    Je vois dans la table 'clients' que ce sont des sociétés. Alors les clients qui appartiennent à une société ou à une autre, je ne pige pas !
    A quoi correspondent refsociete et refnumsoc dans la table clients ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [EJB3][HIBERNATE] Probleme avec select max
    Par kristof_machin dans le forum Hibernate
    Réponses: 2
    Dernier message: 26/04/2006, 13h05
  2. [MySQL] [BDD] Problème avec SELECT "dynamique"
    Par Vecine dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/03/2006, 11h11
  3. Problème avec select sous MYSQL
    Par Thomad dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/01/2006, 11h26
  4. problème avec select sur onchange
    Par Kerod dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/12/2005, 14h05
  5. Problème avec select top
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 10/12/2004, 14h55

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