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 :

Filtre et tri sur 2 tables => Utilisation d'une vue ?


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Filtre et tri sur 2 tables => Utilisation d'une vue ?
    Bonjour,

    J'ai sur un site une gestion de vote pour des "sélections". Il y a 2 types de votes, l'un par inscription sur le site d'un internaute (table contact et vote_contact), l'autre via un accès pro avec un liste de structure déjà défini (table structure et vote).

    J'aimerais faire des recherches dans les résultats en vue de les afficher. Jusqu'à la pas de souci, ce qui me gêne un peu c'est qu'il faudrait que je prenne en compte indifféremment les votes de la table vote et les vote de la table vote_contact. Je ne vois pas trop comment utiliser des filtres et des tris sur ces 2 tables en même temps.

    La solution que je vois pour l'instant c'est de faire une vue en faisait mon SELECT sur la table vote, puis ajouter à cette vue le SELECT de la table vote_contact, pour enfin vers un SELECT trié sur ma vue.
    Est ce que vous voyez une solution plus optimisée ?

    Merci

    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
    CREATE TABLE `structure` (
      `str_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `str_raison_soc` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
      `str_adresse1` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
      `str_adresse2` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
      `str_cp` int(5) unsigned zerofill NOT NULL,
      `str_ville` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
      `str_groupe` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
      PRIMARY KEY (`str_id`)
    );
     
    CREATE TABLE `contact` (
      `con_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `con_nom` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
      `con_prenom` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
      `con_email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
      `con_mdp` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
      `con_ville` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
      `con_cp` int(5) unsigned zerofill NOT NULL,
      `con_actif` tinyint(3) unsigned DEFAULT NULL,
      PRIMARY KEY (`con_id`)
    );
     
    CREATE TABLE `selection` (
      `sel_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `cat_id` int(10) unsigned NOT NULL,
      `sel_nom` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`sel_id`),
    );
     
    CREATE TABLE `vote` (
      `vot_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `sel_id` int(10) unsigned DEFAULT NULL,
      `str_id` int(10) unsigned DEFAULT NULL,
      `vot_nb_voix` int(10) unsigned NOT NULL,
      `vot_date` datetime NOT NULL,
      `vot_ip` int(10) unsigned NOT NULL,
      PRIMARY KEY (`vot_id`)
    );
     
    CREATE TABLE `vote_contact` (
      `vop_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `sel_id` int(10) unsigned DEFAULT NULL,
      `con_id` int(10) unsigned DEFAULT NULL,
      `vop_date` datetime NOT NULL,
      `vop_ip` int(10) unsigned NOT NULL,
      PRIMARY KEY (`vop_id`)
    );

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Une autre solution consisterait à faire 2 requêtes sur chaque table, renvoyant chacune les mêmes champs (même type de données), et en joignant ces 2 requête en une seule par la clause UNION.
    La clause ORDER BY triera alors sur l'union des 2 requêtes.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Effectivement, ça me paraît plus simple, je vais faire ça.

    Merci

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

Discussions similaires

  1. Tri sur deux tables
    Par GriffinK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2010, 13h51
  2. Filtre avec critère sur autre table
    Par dvdavid2009 dans le forum Débuter
    Réponses: 4
    Dernier message: 18/08/2009, 13h48
  3. Filtre et tri sur variable ?
    Par Sylvie.B dans le forum Débuter
    Réponses: 1
    Dernier message: 28/07/2009, 16h45
  4. Jointure et tri sur 4 tables
    Par Aquellito dans le forum ASP.NET
    Réponses: 5
    Dernier message: 21/03/2009, 15h59
  5. Tri sur 2 tables
    Par VARACH dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/09/2006, 14h57

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