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 :

[ difficile ] est ce faisable algorithmiquement en sql ?


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [ difficile ] est ce faisable algorithmiquement en sql ?
    Salut
    dans le cadre du développement de phpmyvisites j'ai un probleme urgent à résoudre (et oui je bloque !).

    Probleme :
    une table SEQ contient des séquence sde nb
    34;20;15
    20;15;50
    45;20;15
    20;4
    5;7;20

    objectif : avoir en une requete unique si possible, les couples ET le nombre d'occurences de ces couples, "couple" étant l'ensemble de 2 valeurs X;Y avec X OU exclusif Y donné
    exemple : je veux les couples 20;Y
    il me retourne
    20;15 | 3
    20;4 | 1

    astuce pour aider les valeurs peuvent être de taille fixe (5 caractères par ex. 20 serait 00020)

    Merci d'avance si vous avez une idée de comment faire ça.

    Il y a toujours la possibilité de sélectionner les couples différents
    - select champ from seq where champ like '%00020;_____%"

    - (ici énorme traitement très bourrin pour sélectionner les couples uniques, compter les occurences de chaque)

    - pour chaque couple unique 20;X
    select count(*) from seq where champ like '%00020;X%'

    mais ça ne me plait guère !
    Ce n'est pas beau et c'est très lent.

    J'attends votre aide, merci
    Matthieu

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Solution avec des fonctions ORACLE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT SUBSTR(champ, INSTR(champ, '00020;'), 11), COUNT(*)
    FROM Seq
    WHERE Champ LIKE '%00020;_____%'
    GROUP BY SUBSTR(champ, INSTR(champ, '00020;'), 11)
    INSTR (A, B) ramène la position de la première occurrence de la chaine B dans la chaîne A.
    SUBSTR (A,n, p) ramène l caractères de A à partir de la position p
    Ce code ne fonctionne pas si tu peux avoir plusieurs couples 00020;yyyyy dans la même ligne
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Août 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    joli merci bien !

    Par contre effectivement ça ne fonctionne pas quand il y a plusieurs 20:X dans la même ligne... est ce faisable dans ce cas là ? Je ne crois pas, mais qui sait ?

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Août 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    ps :
    pour tester en mysql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT SUBSTRING( champ, INSTR( champ, '00020;' ) , 11 ) , COUNT( * )
    FROM seq
    WHERE Champ LIKE '%00020;_____%'
    GROUP BY SUBSTRING( champ, INSTR( champ, '00020;' ) , 11 )
    LIMIT 0 , 30

    et le dump

    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
     
    CREATE TABLE `seq` (
      `id` int(11) NOT NULL auto_increment,
      `champ` varchar(255) NOT NULL default '',
      PRIMARY KEY  (`id`),
      KEY `champ` (`champ`)
    ) TYPE=MyISAM AUTO_INCREMENT=7 ;
     
    -- 
    -- Contenu de la table `seq`
    -- 
     
    INSERT INTO `seq` (`id`, `champ`) VALUES (1, '00020;00001;00004;00005;00003;');
    INSERT INTO `seq` (`id`, `champ`) VALUES (2, '00003;00006;00020;00001;00004;00009;91;00004;00009;91;00004;00009;00091;00004;00009;00009');
    INSERT INTO `seq` (`id`, `champ`) VALUES (3, '00005;00001;00004;00009;00009;00020;00005;00006;');
    INSERT INTO `seq` (`id`, `champ`) VALUES (4, '00001;00004;00009;00009;00040;00030;00020;00005;00006');
    INSERT INTO `seq` (`id`, `champ`) VALUES (5, '00001;00004;00009;00009;00020;00001;00035;');
    INSERT INTO `seq` (`id`, `champ`) VALUES (6, '00001;00004;00009;00009;00020;00356;00004');

Discussions similaires

  1. Est-ce faisable avec BO?
    Par Adrienchey dans le forum Débuter
    Réponses: 5
    Dernier message: 10/06/2008, 00h01
  2. Réponses: 1
    Dernier message: 06/05/2008, 16h50
  3. [PHP-JS] Ce code est il faisable ?
    Par bilou95 dans le forum Langage
    Réponses: 1
    Dernier message: 03/07/2007, 11h48
  4. mon projet est il faisable avec webdev ?
    Par M@XflY dans le forum WebDev
    Réponses: 2
    Dernier message: 24/11/2006, 16h44
  5. Test d'égalité entre deux algorithmes, ça existe, est-ce faisable ?
    Par davcha dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 25/04/2006, 18h04

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