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 :

Bon je vais essayer d'être simple :


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 94
    Points : 53
    Points
    53
    Par défaut [resolu] Bon je vais essayer d'être simple :
    Bon je vais essayer d'être simple :

    J'ai deux tables :

    Liste des champs de la Table_A
    -------------------
    id_site_1
    clic_site_1
    id_site_2
    clic_site_2
    ...
    id_site_20
    clic_site_20
    -------------------


    Liste des champs de la Table_B
    -------------------
    id
    titre
    ...
    -------------------


    Je souhaite avoir le résultat suivant avec :
    pour la première ligne idsite_1(table_A) = id(table_B)
    pour la deuxième ligne idsite_2(table_A) = id(table_B)
    ...

    -------------------
    idsite_1, titre, clic_site_1
    idsite_2, titre, clic_site_2
    idsite_3, titre, clic_site_3
    ...
    idsite_20, titre, clic_site_20
    -------------------

    Est-ce possible en SQL pur ? Ou, dois-je passer par un langage de script ?
    Si tel est le cas pouvez-vous me donner des pistes sachant que je suis sur une config php/mysql

    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Ton modèle est déjà "anormal" car tu repète 20 fois les mêmes données.

    Donc tes requêtes seront monstrueuses et inexploitable en terme de temps de traitement.
    Elle seront en outre difficile à écrire.

    Remanie ton modèle avant de reposer ta question.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 94
    Points : 53
    Points
    53
    Par défaut avec la requête SQL ..
    Bonjour !

    Je ne suis pas sûr d'avoir expliqué correctement ce que je veux faire, donc voici la requête qui permet de créer et des exemples d'enregistrements. En farfouillant un peu dans le forum j'en ai déduit que c'est une sorte de passage de ligne en colonne, mais pour l'instant je seche toujours autant ...

    requête SQL :
    -----------------------------------------------
    CREATE TABLE table_a (
    id mediumint(8) NOT NULL auto_increment,
    id_1 mediumint(8) NOT NULL default \'0\',
    clic_1 mediumint(8) NOT NULL default \'0\',
    id_2 mediumint(8) NOT NULL default \'0\',
    clic_2 mediumint(8) NOT NULL default \'0\',
    id_3 mediumint(8) NOT NULL default \'0\',
    clic_3 mediumint(8) NOT NULL default \'0\',
    KEY id (id)
    ) TYPE=MyISAM;

    INSERT INTO `table_a` (`id`, `id_1`, `clic_1`, `id_2`, `clic_2`, `id_3`, `clic_3`)
    VALUES (\'1\', \'1\', \'15\', \'2\', \'13\', \'3\', \'9\');


    CREATE TABLE table_b (
    id mediumint(8) unsigned NOT NULL auto_increment,
    titre varchar(100) NOT NULL default \'\',
    KEY id (id)
    ) TYPE=MyISAM;

    INSERT INTO table_b VALUES (1,\'titre1\');
    INSERT INTO table_b VALUES (2,\'titre2\');
    INSERT INTO table_b VALUES (3,\'titre3\');
    -----------------------------------------------


    Voila ce que je voudrais obtenir en liant le champ id_1 de la table_a au champ id de la table_B puis en liant le champ id_2 de la table_a au champ id de la table_B ....

    id_b clic titre
    ---------------------------
    1 15 titre1
    2 13 titre2
    3 9 titre3


    Merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 94
    Points : 53
    Points
    53
    Par défaut avec la requête SQL ..
    Bonjour !

    Je ne suis pas sûr d'avoir expliqué correctement ce que je veux faire, donc voici la requête qui permet de créer et des exemples d'enregistrements. En farfouillant un peu dans le forum j'en ai déduit que c'est une sorte de passage de ligne en colonne, mais pour l'instant je seche toujours autant ...

    requête SQL :
    -----------------------------------------------
    CREATE TABLE table_a (
    id mediumint(8) NOT NULL auto_increment,
    id_1 mediumint(8) NOT NULL default \'0\',
    clic_1 mediumint(8) NOT NULL default \'0\',
    id_2 mediumint(8) NOT NULL default \'0\',
    clic_2 mediumint(8) NOT NULL default \'0\',
    id_3 mediumint(8) NOT NULL default \'0\',
    clic_3 mediumint(8) NOT NULL default \'0\',
    KEY id (id)
    ) TYPE=MyISAM;

    INSERT INTO `table_a` (`id`, `id_1`, `clic_1`, `id_2`, `clic_2`, `id_3`, `clic_3`)
    VALUES (\'1\', \'1\', \'15\', \'2\', \'13\', \'3\', \'9\');


    CREATE TABLE table_b (
    id mediumint(8) unsigned NOT NULL auto_increment,
    titre varchar(100) NOT NULL default \'\',
    KEY id (id)
    ) TYPE=MyISAM;

    INSERT INTO table_b VALUES (1,\'titre1\');
    INSERT INTO table_b VALUES (2,\'titre2\');
    INSERT INTO table_b VALUES (3,\'titre3\');
    -----------------------------------------------


    Voila ce que je voudrais obtenir en liant le champ id_1 de la table_a au champ id de la table_B puis en liant le champ id_2 de la table_a au champ id de la table_B ....

    id_b clic titre
    ---------------------------
    1 15 titre1
    2 13 titre2
    3 9 titre3


    Merci

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 94
    Points : 53
    Points
    53
    Par défaut avec la requête SQL ..
    le même sans les smileys ....


    Bonjour !

    Je ne suis pas sûr d'avoir expliqué correctement ce que je veux faire, donc voici la requête qui permet de créer et des exemples d'enregistrements. En farfouillant un peu dans le forum j'en ai déduit que c'est une sorte de passage de ligne en colonne, mais pour l'instant je seche toujours autant ...

    requête SQL :
    -----------------------------------------------
    CREATE TABLE table_a (
    id mediumint(8) NOT NULL auto_increment,
    id_1 mediumint(8) NOT NULL default \'0\',
    clic_1 mediumint(8) NOT NULL default \'0\',
    id_2 mediumint(8) NOT NULL default \'0\',
    clic_2 mediumint(8) NOT NULL default \'0\',
    id_3 mediumint(8) NOT NULL default \'0\',
    clic_3 mediumint(8) NOT NULL default \'0\',
    KEY id (id)
    ) TYPE=MyISAM;

    INSERT INTO `table_a` (`id`, `id_1`, `clic_1`, `id_2`, `clic_2`, `id_3`, `clic_3`)
    VALUES (\'1\', \'1\', \'15\', \'2\', \'13\', \'3\', \'9\');


    CREATE TABLE table_b (
    id mediumint(8) unsigned NOT NULL auto_increment,
    titre varchar(100) NOT NULL default \'\',
    KEY id (id)
    ) TYPE=MyISAM;

    INSERT INTO table_b VALUES (1,\'titre1\');
    INSERT INTO table_b VALUES (2,\'titre2\');
    INSERT INTO table_b VALUES (3,\'titre3\');
    -----------------------------------------------


    Voila ce que je voudrais obtenir en liant le champ id_1 de la table_a au champ id de la table_B puis en liant le champ id_2 de la table_a au champ id de la table_B ....

    id_b clic titre
    ---------------------------
    1 15 titre1
    2 13 titre2
    3 9 titre3


    Merci

  6. #6
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Je rejoins la remarque de SQLPro.

    Pourquoi ne pas créer ta table_a de la sorte ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE TABLE table_a ( 
    id mediumint(8) NOT NULL auto_increment, 
    clic_1 mediumint(8) NOT NULL default \'0\')
    Ca sera surement mieux gérable par la suite et analytiquement correct.
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 94
    Points : 53
    Points
    53
    Par défaut car ...
    Bon je reprend tout depuis le début, je me suis probablement fourvoyé en créant la table_a.


    En fait la valeur clic provient déjà de la table_b mais change toutes les semaines et je souhaite les conserver pour toutes les semaines.

    --> soit je crée une colonne dans table_b par nouvelle semaine mais cela risque de devenir vite ingérable

    --> soit je copie les n meilleurs scores pour chaque semaine dans la table_a sous le forme exposé ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    id --> numero de la semaine
    id_1 --> site ayant eu le plus de clic dans la table_b
    clic_1 --> score de id_1
    id_2 --> deuxième site ayant eu le plus de clic dans la table_b
    clic_2 --> score de id_2
    Voila la raison


    Si vous avez de meilleures idées je suis bien evidemment preneur


    Et en tout cas, merci pour vos réponses, je vais bien finir par trouver une solution ...

  8. #8
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Si j'ai bien compris ce que tu cherches a faire...

    Pour ma part, je ferais comme ca après une analyse rapide.

    En fait, ce que tu cherches, c'est plus ou moins un système d'historisation.

    1) une table T1 (id,score)

    2) une table T2 (id,date,score)

    Si j'ai bien compris ce que tu cherches
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 94
    Points : 53
    Points
    53
    Par défaut voui
    Je n'avais pas vu cela comme ça et effectivement cela me parait être plus simple pour les requêtes.

    Par contre je préfère mon idée pour stocker les donnée il me semble plus judicieux d'ajouter un seul enregistrement par semaine dans une table que 20 (dans le cas ou je ne conserve que les 20 meilleurs scores) dasn une autre.

    Mais bon la raison risque de l'emporter car au niveau des requêtes de la seconde table c'est vrai que c'est carrément plus simple.

    Merci, si je trouve une autre solution je vous en ferai part.

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

Discussions similaires

  1. question tres simple : recuperer une variable d'URL
    Par H-bil dans le forum Langage
    Réponses: 5
    Dernier message: 14/06/2006, 16h26
  2. [CGI] Formulaire tres simple
    Par needles94000 dans le forum Web
    Réponses: 2
    Dernier message: 08/02/2006, 02h28
  3. prob tres simple, form, method get
    Par killy-kun dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 25/08/2005, 10h29
  4. Réponses: 6
    Dernier message: 27/04/2005, 15h46
  5. [Defi] Query SQL qui semble tres simple
    Par Wakko2k dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/04/2004, 10h01

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