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 :

order by sur plusieurs tables


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 4
    Points : 5
    Points
    5
    Par défaut order by sur plusieurs tables
    Bonjour,
    J'aimerai effectuer un trie sur plusieurs table.
    Schéma des 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
     
    table demande_tf {
      iddemande int(5) NOT NULL auto_increment,
      idclient int(8) NOT NULL default '0',
      num_dossier varchar(32) NOT NULL default '0',
      domaine tinyint(4) NOT NULL default '-1',
      raison varchar(50) NOT NULL default '',
      rappel datetime NOT NULL default '0000-00-00 00:00:00',  
      societe varchar(50) NOT NULL default '',
      contact varchar(50) NOT NULL default '',
      PRIMARY KEY  (iddemande)
    ) TYPE=MyISAM;
     
    table demande_tm {
      iddemande int(5) NOT NULL auto_increment,
      idclient int(8) NOT NULL default '0',
      num_dossier varchar(32) NOT NULL default '0',
      domaine tinyint(4) NOT NULL default '-1',
      raison varchar(50) NOT NULL default '',
      rappel datetime NOT NULL default '0000-00-00 00:00:00',  
      etat tinyint(2) NOT NULL default '0',
      charge_affaire varchar(50) NOT NULL default '',
      PRIMARY KEY  (iddemande)
    ) TYPE=MyISAM;
    La je vous en ai mis 2 mais en faite il y en a 9.
    Le problème c'est que, pour effectuer mon trie, il me semble qu'il faille que toutes les données devant êtres trier se trouve dans une unique table.
    Rectifiez moi si je me trompe.
    Je pense avoir trouvé une solution mais est ce la meilleur, voici ma solution :
    Je cré une table temporaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    create temporary table demande_client {
      iddemande int(5) NOT NULL auto_increment,
      idclient int(8) NOT NULL default '0',
      num_dossier varchar(32) NOT NULL default '0',
      domaine tinyint(4) NOT NULL default '-1',
      raison varchar(50) NOT NULL default '',
      rappel datetime NOT NULL default '0000-00-00 00:00:00',  
      PRIMARY KEY  (iddemande)
    ) TYPE=MyISAM;
    Regroupant les champs identique de chaque table, et ensuite j'effectue sur cette meme table ma requete avec mon order by pour afficher mes donnés.
    Qu'en pensez vous?
    Existe t il une autre façon d'effectuer ce trie.
    Merci d'avance
    MadMax

  2. #2
    Membre chevronné

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    606
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 606
    Points : 2 065
    Points
    2 065
    Par défaut
    Je ne sais pas où tu en est dans ton projet, mais à mon sens, il y a un problème de design dès le départ.

    A mon avis, avoir 9 tables quasi identique n'a pas de sens.

    Tu aurais du avoir une table unique avec tous les champs commun
    (idclient, num_dossier, domaine, raison etc..) + un champ type_demande + une sous table par type de demande.

    Donc quelque chose comme :
    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
     
     
    table demande_root { 
      iddemande int(5) NOT NULL auto_increment, 
      typedemande int(5) NOT NULL,
      idclient int(8) NOT NULL default '0', 
      num_dossier varchar(32) NOT NULL default '0', 
      domaine tinyint(4) NOT NULL default '-1', 
      raison varchar(50) NOT NULL default '', 
      rappel datetime NOT NULL default '0000-00-00 00:00:00',  
      PRIMARY KEY  (iddemande) 
    ) TYPE=MyISAM; 
     
     
    table demande_tf { 
      id_tf int(5) NOT NULL auto_increment, 
      iddemande int(5) NOT NULL , 
      societe varchar(50) NOT NULL default '', 
      contact varchar(50) NOT NULL default '', 
      PRIMARY KEY  (id_tf ) 
    ) TYPE=MyISAM; 
     
    table demande_tm { 
      id_tm int(5) NOT NULL auto_increment, 
      iddemande int(5) NOT NULL , 
      etat tinyint(2) NOT NULL default '0', 
      charge_affaire varchar(50) NOT NULL default '', 
      PRIMARY KEY  (id_tm ) 
    ) TYPE=MyISAM;
    Là tu aurais pu faire une requête join, qui t'aurais (éventuellement) retourné tous les champs de toutes les tables et sur lesquels tu aurais pu faire tous les tris que tu voulais.

    Pour n'avoir que les demande d'un type (tm ou tf) il te suffisait de filtrer sur typedemande (qui aurait bien besoin d'être indexé - comme iddemande dans les sous-tables)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Excuse moi, c'est moi qui est mal expliqué ma demande, en faite les tables demande_tf, demande_tm sont déja des reunion de table.
    En faite ds mes tables demande_* je n'est que les champs

    iddemande, idclient, domaine, date_sous, et num_dossier.

    Je reformule ma question :
    En faite, je suis entrain de faire des modifs sur une BD déja existante.
    Avant modif je n'avais qu'une table demande, et j'effectué ma requête ci-contre:
    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
     
    select D.idclient, D.domaine, date_format(D.date_sous,'%d/%m/%Y') as date_sous,
    	date_format(D.date_sous,'%Y-%m-%d') as souscription_ordre, D.num_dossier,
    	C.societe, C.contact, C.etat, C.charge_affaire, O.societe as operateur, P.raison, 
    	IF(C.rappel_on,date_format(C.rappel,'%d/%m/%Y %H:%i'),'') as rappel,
    	IF(C.rappel_on,date_format(C.rappel,'%Y-%m-%d %H:%i'),'') as rappel_ordre  
     
    	FROM tfp_demande D,
    		tfp_client C
    		left join tfp_operateur as O on D.idop_fixe=O.idop 
    		left join presc_lien as L on L.code=substring(D.idprescripteur,1,6) 
    		left join presc_data as P on P.iddata=L.iddata 
    	WHERE D.idclient>0 
    	AND C.etat="$ref_etat"
    	AND C.rappel_on='1'
    	AND C.charge_affaire like '%$ref_charge_affaire%'
    	AND D.domaine=$ref_domaine
    	AND C.societe like '%$ref_societe%'
    	AND C.contact like '%$ref_contact%'
    	AND C.rappel>='$ref_da-$ref_dm-$ref_dj' and C.rappel<='$ref_fa-$ref_fm-$ref_fj 23:59:59'
    	and D.idclient=C.idclient ORDER BY $ordre
    Maintenant, apres modification sur divers formulaire, je suis obligé d'utiliser une table par type de demande.
    Je dois donc en faite faire plusieurs requête :
    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
     
    select D.idclient, D.domaine, date_format(D.date_sous,'%d/%m/%Y') as date_sous,
    	date_format(D.date_sous,'%Y-%m-%d') as souscription_ordre, D.num_dossier,
    	C.societe, C.contact, C.etat, C.charge_affaire, O.societe as operateur, P.raison, 
    	IF(C.rappel_on,date_format(C.rappel,'%d/%m/%Y %H:%i'),'') as rappel,
    	IF(C.rappel_on,date_format(C.rappel,'%Y-%m-%d %H:%i'),'') as rappel_ordre  
     
    	FROM [color=red]tfp_demande_tf[/color] D,
    		tfp_client C
    		left join tfp_operateur as O on D.idop_fixe=O.idop 
    		left join presc_lien as L on L.code=substring(D.idprescripteur,1,6) 
    		left join presc_data as P on P.iddata=L.iddata 
    	WHERE D.idclient>0 
    	AND C.etat="$ref_etat"
    	AND C.rappel_on='1'
    	AND C.charge_affaire like '%$ref_charge_affaire%'
    	AND D.domaine=$ref_domaine
    	AND C.societe like '%$ref_societe%'
    	AND C.contact like '%$ref_contact%'
    	AND C.rappel>='$ref_da-$ref_dm-$ref_dj' and C.rappel<='$ref_fa-$ref_fm-$ref_fj 23:59:59'
    	and D.idclient=C.idclient
     
     
    select D.idclient, D.domaine, date_format(D.date_sous,'%d/%m/%Y') as date_sous,
    	date_format(D.date_sous,'%Y-%m-%d') as souscription_ordre, D.num_dossier,
    	C.societe, C.contact, C.etat, C.charge_affaire, O.societe as operateur, P.raison, 
    	IF(C.rappel_on,date_format(C.rappel,'%d/%m/%Y %H:%i'),'') as rappel,
    	IF(C.rappel_on,date_format(C.rappel,'%Y-%m-%d %H:%i'),'') as rappel_ordre  
     
    	FROM [color=red]tfp_demande_tm[/color] D,
    		tfp_client C
    		left join tfp_operateur as O on D.idop_fixe=O.idop 
    		left join presc_lien as L on L.code=substring(D.idprescripteur,1,6) 
    		left join presc_data as P on P.iddata=L.iddata 
    	WHERE D.idclient>0 
    	AND C.etat="$ref_etat"
    	AND C.rappel_on='1'
    	AND C.charge_affaire like '%$ref_charge_affaire%'
    	AND D.domaine=$ref_domaine
    	AND C.societe like '%$ref_societe%'
    	AND C.contact like '%$ref_contact%'
    	AND C.rappel>='$ref_da-$ref_dm-$ref_dj' and C.rappel<='$ref_fa-$ref_fm-$ref_fj 23:59:59'
    	and D.idclient=C.idclient
    Apres execution de c'est requête, j'aimerai faire un tri sur l'ensemble des résultats des requêtes effectué.

    Dois je crer une table temporaire ou utiliser une autre astuce?

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

Discussions similaires

  1. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 13h54
  2. SELECT ORDER BY sur 2 tables
    Par _Eric_ dans le forum Langage SQL
    Réponses: 5
    Dernier message: 21/07/2004, 12h17
  3. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  4. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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