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 :

Requête avec un where particulier


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 34
    Points : 25
    Points
    25
    Par défaut Requête avec un where particulier
    bonjour,

    j'ai une base avec par exemple les données suivantes
    utilisateur categorie
    1 #aa
    2 #ab
    3 #ac
    4 #aa#ab
    5 #ab#ac
    6 #aa#ab#ac

    par exemple je cherche les utilisateurs dont la categorie contient la chaine "#ab" donc j'ai un resultat me donnant
    utilisateur categorie correspondance
    1 #aa 0
    2 #ab 1
    3 #ac 0
    4 #aa#ab 1
    5 #ab#ac 1
    6 #aa#ab#ac 1

    maintenant plus compliqué
    la même chose mais qui compte s'il y a correspondance avec la chaine "#ab" et additionne avec s'il y a correspondance avec la chaine"#ac" par exemple
    utilisateur categorie correspondance
    1 #aa 0
    2 #ab 1
    3 #ac 1
    4 #aa#ab 1
    5 #ab#ac 2
    6 #aa#ab#ac 2

    Merci si vous pouvez m'aider. Je pense qu'il y a du LIKE dans le WHERE

    et après si on peut trier en descroissant

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    C'est une clause WHERE que tu cherches ou une colonne CORRESPONDANCE qui compte les chaines voulues?

    Bon, je vais considérer la seconde option. Tu peux utiliser une instruction CASE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT utilisateur,
               categorie,
               CASE WHEN categorie LIKE '%#ab#ac' then 2
                       WHEN categorie LIKE '%#ab' then 1
                       ELSE 0
               END correspondance
    FROM t
    ORDER BY correspondance DESC;
    J'ai considéré que les chaines se suivaient et étaient en fin de la valeur. Si ce n'est pas le cas il faudra légèrement modifier le pattern dans le LIKE.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    bonsoir,

    en fait la chaine dans categorie n'est pas forcement dans l'ordre de la requête :

    par exemple "#ac#dd#ab" doit aussi donner 2 mais surtout j'ai plusieurs sous-chaines #xx dans celle ci

    peut on additionner 1 quand on trouve #ab + 1 quand on trouve #ac ? quelque soit l'ordre dans la chaine categorie ?

    un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT utilisateur,
               categorie,
                       WHEN categorie LIKE '%#ac%' then +1
                       WHEN categorie LIKE '%#ab%' then +1
                       = correspondance
    FROM t
    ORDER BY correspondance DESC;

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    je pense que cela fait l'affaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT utilisateur,
          categorie,
          SUM(CASE WHEN categorie LIKE '%#aa%' then 1 else 0 END) +
          SUM(CASE WHEN categorie LIKE '%#ac%' then 1 else 0 END) as correspondance
          FROM `test_categories`
          GROUP BY utilisateur
          ORDER BY correspondance DESC;
    Merci

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

Discussions similaires

  1. Une Requête avec différents WHERE
    Par jazzybluesy dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 02/11/2012, 22h59
  2. Réponses: 2
    Dernier message: 08/09/2011, 18h20
  3. Réponses: 4
    Dernier message: 26/07/2011, 11h29
  4. requête avec un where sur une date
    Par tibofo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 06/02/2011, 20h58
  5. Réponses: 16
    Dernier message: 20/01/2011, 12h45

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