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 SQL problème :(


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut Requête SQL problème :(
    Bonjour,
    voilà je suis en train de réaliser des requêtes sur une base de donnée (sous SequelPro sur MAC) et j'ai quelques soucis.
    Je m'explique, ma base de donnée comporte pour faire simple quatre champs différents (id, ip, license et date). Lorsqu'une personne se connecte sur le logiciel, un id est ajouté, on retrouve des informations ect que l'on peut avoir déjà reçu (si cette personne c'est déjà co).
    Le soucis est que j'essaye de faire une requête me permettant de voir qu'elles sont les personnes étant passé de la version gratuite du logiciel à la version payante. Mais le soucis est que je dois pouvoir faire en gros un code qui que :
    'la personne a le logiciel version démo' puis 'est passée à la version payante' mais je ne dois pas changé de champ puisque tout ce passe dans le champ license. J'espère avoir été assez clair
    SmveZoo

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 675
    Points
    39 675
    Billets dans le blog
    9
    Par défaut
    Quand une personne qui a la version gratuite achète la version payante, y a -t- il une nouvelle ligne créée dans la table ou alors c'est une mise à jour de la colonne licence ?

    Si c'est une mise à jour, sauf si vous avez un historique, vous ne pourrez pas retrouver les personnes concernées
    Si c'est une nouvelle ligne, c'est possible à condition d'avoir un critère permettant d'identifier que tel n° de licence est gratuit et tel autre payant, par exemple via une jointure sur une autre table
    Qu'en est il ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Bonjour, une nouvelle ligne est créée dans la table à chaque connexion d'un utilisateur du logiciel c'est-à-dire que lorsqu'un utilisateur va se connecter avec la version gratuite sa connection sera marqué avec son GUID et son IP tandis que lorsque l'utilisateur se connectera à nouveau on le reconnaitra par rapport à son GUID/IP et il se peut qu'à ce moment là la license soit passé de gratuite à une license payante.
    J'espère avoir été compris
    SmveZoo

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 675
    Points
    39 675
    Billets dans le blog
    9
    Par défaut
    D'accord, mais vous n'indiquez toujours pas où est l'information qui permet de savoir que tel n° de licence est gratuit ou payant
    Sans cette information, impossible de vous aider

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    L'information se trouve dans le même champ 'license', si l'utilisateur se connecte avec une license gratuite on verra 'TRIAL' sinon on voit son numéro de license

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 675
    Points
    39 675
    Billets dans le blog
    9
    Par défaut
    Vu qu'un enregistrement est créé dans la table à chaque connexion, la solution est de vérifier qu'il n'existe pas déjà un enregistrement dans la table, pour la personne, dont le n° de licence est différent de "TRIAL". Soit la requête suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Select MAIN.IP      as ID_Personne
         , MAIN.license as Num_Licence 
    from ma_table as MAIN
    Where MAIN.License <> 'TRIAL'
      and not exists
         (select 1
          from ma_table as SUBQ
          where SUBQ.IP=MAIN.IP
            and SUBQ.License<>'TRIAL'
            and SUBQ.ID<>MAIN.ID)
    Quelques remarques :
    • Une colonne d'horodatage serait utile, ne serait-ce que pour savoir quand la personne est passée du gratuit au payant
    • Licence s'écrit avec 2 "C" autant nommer les objets base de données correctement
    • La requête ne sera pas performante, le filtre utilise un prédicat "<>" par définition non sargable, si votre table est volumineuse, il faudra réfléchir à revoir votre modèle de données et/ou votre fonctionnement

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Un grand merci pour la réponse rapide, le code semble fonctionner je vous tiendrai au courant après la fin de l'exécution de la requête qui est plutôt long :/

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Bon je vois un petit soucis dans la requête il me semble puisque en regardant les ip je vois que certains n'ont pas téléchargé la version TRIAL et sont donnés comme résultat :/

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 675
    Points
    39 675
    Billets dans le blog
    9
    Par défaut
    C'est normal, je pensais que tous commençaient par une version TRIAL, il faut donc ajouter une condition : tester l'existence d'une verion TRIAL pour la personne

    Edit : ce qui donne

    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
    Select MAIN.IP      as ID_Personne
         , MAIN.license as Num_Licence 
    from ma_table as MAIN
    Where MAIN.License <> 'TRIAL'
      and not exists
         (select 1
          from ma_table as SUBQ
          where SUBQ.IP=MAIN.IP
            and SUBQ.License<>'TRIAL'
            and SUBQ.ID<>MAIN.ID) 
      and exists
         (select 1
          from ma_table as SUBQ
          where SUBQ.IP=MAIN.IP
            and SUBQ.License='TRIAL'
            and SUBQ.ID<>MAIN.ID)

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Ok ça à l'air de fonctionner c'est super ça merci
    Par contre le temps de l'exécution de la requête est super long, il faudrait que je change la BDD afin de réduire le temps ?

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 675
    Points
    39 675
    Billets dans le blog
    9
    Par défaut
    Communiquez la description des index existants (ordres CREATE index) et le nombre de lignes dans la table (nombre actuel, et en volume de croisière cible)

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Ok, c'est bon j'ai réglé le soucis avec le créateur de la BDD, il s'agissait d'un problème d'index tout va beaucoup plus vite. Je vous remercie pour l'aide.
    SmveZoo

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Salut
    j'ai ajouté la ligne 4 qui est une condition pour voir si la personne a une clé qui correspond bien au format vendu mais le problème et que lorsque j'exécute on trouve des milliers de résultats alors que si je ne rajoute pas le "or" et que tu tests "7W%" ou "7R%"seul on trouve un résultat qui semble correct.
    Peux-tu m'aider à résoudre ce problème ?

    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
    Select MAIN.GUID as ID_Personne, MAIN.licenseKey as Num_Licence 
    from `TABLE` as MAIN
    Where MAIN.licenseKey<>'TRIAL' 
      and MAIN.licenseKey like '7W%' or '7R%
      and not exists
         (select 1
          from `TABLE` as SUBQ
          where SUBQ.GUID=MAIN.GUID
            and SUBQ.licenseKey<>'TRIAL'
            and SUBQ.id<>MAIN.id) 
      and exists
         (select 1
          from `TABLE` as SUBQ
          where SUBQ.GUID=MAIN.GUID
            and SUBQ.licenseKey='TRIAL' 
            and SUBQ.id<>MAIN.id)

  14. #14
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 675
    Points
    39 675
    Billets dans le blog
    9
    Par défaut
    Essayez comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Where MAIN.licenseKey<>'TRIAL' 
      and(    MAIN.licenseKey like '7W%' 
          or  MAIN.licenseKey like '7R%'
      and not exists
         (select 1 etc...

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Merci ça à l'air de fonctionner.
    Par contre j'ai un nouveau petit soucis avec le code après l'avoir travailler. Les chiffres données par la requête ne sont pas bons. Ils représentent seulement les personnes s'étant servis du logiciel une seule fois après l'achat de la clef. Je ne sais pas à quoi c'est dû.

  16. #16
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 675
    Points
    39 675
    Billets dans le blog
    9
    Par défaut
    Une requête répond à un besoin fonctionnel

    Votre expression de besoin initiale était la suivante :

    Citation Envoyé par smvezoo Voir le message
    Le soucis est que j'essaye de faire une requête me permettant de voir qu'elles sont les personnes étant passé de la version gratuite du logiciel à la version payante.
    Je vous ai donc proposé une requête qui détecte le passage de la version gratuite à la version payante. (d'où le 1er not exists...)

    Si votre besoin change, expliquez les nouvelles règles, et il faudra construire la nouvelle requête en fonction de ces règles.

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Oui, en effet c'est toujours le but de cette requête sauf que j'aimerai voir tous les utilisateurs passant de la version gratuite à la version payante sauf que si l'utilisateur se connecte deux fois ou plus avec le logiciel acheté il ne sera pas répertorié dans cette requête.
    Si l'on enlève le not exits il semble que cela fonctionne, mais il faut alors mettre un DISTINCT GUID.

  18. #18
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 675
    Points
    39 675
    Billets dans le blog
    9
    Par défaut
    Si, il apparaitra, mais seulement lorsqu'il passera de la version gratuite la version payante

    Dans la requête que je vous avais fournie
    - le 1er exists vérifie qu'il n'existe pas déjà une connexion de type payante pour le user
    - le 2ème exists vérifie que la personne s'était connectée au moins une fois avec une licence gratuite

    Citation Envoyé par smvezoo Voir le message
    Par contre j'ai un nouveau petit soucis avec le code après l'avoir travailler.
    Peut être que ceci explique cela, communiquez votre requête "re-travaillée"

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    J'ai voulu répondre trop vite, d'où la modification de mon ancien post qui revient à votre commentaire. C'est bien une erreur du not exist qui passe donc en exist, et j'ai rajouté un distinct devant le GUID pour éviter les doublons et cela semble fonctionner après une quinzaine de tests sur des GUID différents.
    Merci beaucoup pour l'aide apporté un bon nombre de fois, je continue les tests pour être sûr que la requête est bonne. Maintenant si tout fonctionne il n'y aura plus qu'à trier les requêtes par nombre de fois où l'utilisateur se sera connecté avec la version TRIAL avant de passer à l'achat.

  20. #20
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 675
    Points
    39 675
    Billets dans le blog
    9
    Par défaut
    En ce cas pensez à clôturer le sujet, et éventuellement, mentionner par un vote positif , les réponses qui vous ont aidé

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

Discussions similaires

  1. requête SQL problème avec relation N-N
    Par p'tite Sandrine dans le forum Requêtes et SQL.
    Réponses: 23
    Dernier message: 05/10/2007, 12h08
  2. Requête SQL, problème d'écriture
    Par porci82 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/06/2007, 14h56
  3. [Requête/SQL]Problème de sélection d'enregistrements
    Par phil06 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 15/04/2007, 23h47
  4. [Requêtes SQL] Problème de jointure ?
    Par soso78 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 18/12/2006, 15h37
  5. [Requête SQL] Problème pour echantilloner
    Par jool dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/08/2005, 09h08

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