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 PostgreSQL Discussion :

Programmation plsql sous pgadmin 4


Sujet :

Requêtes PostgreSQL

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 71
    Points : 35
    Points
    35
    Par défaut Programmation plsql sous pgadmin 4
    Bonsoir;
    je suis débutante en postgresql,
    j'ai une table qui contient les colonnes suivantes:
    adresse_ip temps url
    66.249.66.136 09:08:07 /index.php
    66.249.66.136 00:23:9 /zenp/index.php
    66.249.66.136 00:09:07 /zenp.php



    et je veux créer une nouvelle colonne qui contient les visites, en appliquant l'algorithme suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Tant qu’il y’a dans enregistrements dans la base faire
     Lire l’enregistrement i
     Récupérer l’adresse_IPi 
     Si  (adresse_IP(i))= (adresse_IP(i-1))
     Alors ajouter l’enregistrement i a la visite V(i-1)
     Sinon recommencer une nouvelle visite V(i)
     Fin Si
    Fin Tant Que
    j'ai trouvé sur internet qu'il existe une programmation pl/sql qui permet de créer des fonction et appliqué des boucles et des condition
    sous pgsql
    j'ai besoin d'une aide pour commencer le travail

    le resultat souhaité est le suivant:

    adresse_ip temps url visite
    66.249.66.136 09:08:07 /index.php 1
    66.249.66.136 00:23:9 /zenp/index.php 1
    66.249.66.136 00:09:07 /zenp.php 2

    mon but est de vreer une nouvelle colonne visite,

  2. #2
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    En général dans la mésure d'audience au niveau le plus granulaire on identifie :
    un clic : un clic sur une page
    une visite : la visite étant une séquence de pages consultées au cours de la même session ou visite.
    un visiteur : Un visiteur est identifié par authentification, un cookie, ou grossièrement par une IP

    A défaut de créer votre propre identifiant de session, enregistrez pour chaque clic, un identiant de session avec la variable $_SESSION ou la fonction session_id()

    SQL est un language ensembliste, à moins d'un trigger, votre algorithme va altérer les performances de votre application.
    Pourquoi créer une colonne visites alors que vous pouvez l'obtenir avec une simple fonction d'agrégat comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT adresse_ip, count(session_id) as visites
    FROM visites
    GROUP BY adresse_ip;
    Quelle est votre définition de la visite ?

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    Bonsoir manzeki, merci pour votre réponse,
    pour l'instant ma table contient les colonnes suivantes:
    adresse_ip, time, url
    je veux créer une colonne qui contient les visites selon les adresse_ip identique,
    je ne peut pas faire un select sur visite parce que je les pas encore construit.

    Voici le code que j'ai construis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT adresse_ip, count(adresse_ip) 
    FROM fusion
    GROUP BY adresse_ip;
    le résultat est le suivant:
    adresse_ip count
    41.34.23.67 10
    23.56.12.34 1
    56.98.123.34 4

    le resultat que souhaite trouvé est le suivant:
    adresse_ip time url visite
    41.34.23.67 00:09:00 url1 1
    41.34.23.67 00:09:45 url1 1
    56.98.123.34 00:09:45 url3 2

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    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 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Si je comprends bien, le besoin est de faire la somme des temps passés par adresse IP et par page

    Il ne faut pas créer une nouvelle colonne pour ce besoin, il faut calculer ce temps par requête :

    Par exemple, avec ce jeu d'essais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with tab(cadr, ctps, curl) as
        (select '66.249.66.136', '09:08:07', '/index.php'       union all
         select '66.249.66.136', '00:23:09', '/zenp/index.php'  union all
         select '66.249.66.136', '00:09:07', '/zenp.php'        union all
         select '66.249.66.136', '00:02:06', '/zenp.php'        union all
         select '1.136.411.002', '00:05:03', '/machin'          union all
         select '1.136.411.002', '00:02:16', '/truc'            union all
         select '141.101.6.712', '00:11:25', '/bidule'
        )
    et cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select cadr
         , curl
         , sum( cast(substring(ctps, 01, 02) as dec(6,0)) *3600
               +cast(substring(ctps, 04, 02) as dec(6,0)) *60
               +cast(substring(ctps, 07, 02) as dec(6,0))
              ) as durée
    from tab
    group by cadr
           , curl
    order by cadr
    On obtient le temps cumulé comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cadr               cur           durée
    1.136.411.002	/machin	        303
    1.136.411.002	/truc           136
    141.101.6.712	/bidule         685
    66.249.66.136	/index.php      32887
    66.249.66.136	/zenp.php       673
    66.249.66.136	/zenp/index.php	1389

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    merci pour vos réponses, mais mon problème n'est encore pas résolu,
    mon but c'est de créer une nouvelle colonne visite, cette colonne contient des valeurs de types entier, je dois d'abord comparer deux cases successives de la colonne adresse_ip, si les deux cases successives sont égaux (identique) dans ce cas la, la valeur de la case de la colonne visite va augmenté de un,
    c_à_d, si la première cellule de la colonne visite(1) égale à 1, et en comparant les deux premières cellule de la colonne adresse_ip on trouve qu'elles sont identique, dans ce cas la visite(2) devient 2 sinon elle reste toujours égale à 1 et ainsi de suite,

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    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 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    qui dit "successives" dit selon un critère de rangement, quel est ce critère, il n'y a apparemment pas d'horodatage dans votre table qui permettrait de connaitre l'ordre de consultation des pages pour une adresse IP ?

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    est ce qu'il faut créer une colonne qui contient un identifiant?

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    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 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Dans toute table il y a besoin d'une ou plusieurs colonne(s) servant d'identifiant primaire, mais c'est rarement l'identifiant primaire qui permet de connaître l'ordre chronologique d'arrivée : le plus souvent, on choisit des identifiants primaires techniques affectés par le SGBD et la valeur de ces identifiants n'est pas systématiquement chronologique. Si vous devez ranger selon l'ordre de création, il faut, en plus d'une colonne PK, une colonne d'horodatage fin type timestamp.

Discussions similaires

  1. [debutant] execution d'un programme java sous DOS
    Par rika dans le forum Langage
    Réponses: 13
    Dernier message: 26/10/2005, 18h27
  2. [debutant]Executer un programme compilee sous cygwin
    Par Battosaiii dans le forum Windows
    Réponses: 4
    Dernier message: 16/10/2005, 15h37
  3. [C++] Programmation C++ sous Mac
    Par reggae dans le forum Développement OS X
    Réponses: 2
    Dernier message: 09/10/2005, 12h10
  4. Réponses: 5
    Dernier message: 21/11/2004, 18h59
  5. gestion de l'auto-incrementation sous pgadmin
    Par $grm$ dans le forum PostgreSQL
    Réponses: 16
    Dernier message: 29/03/2004, 15h42

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