+ Responder ao Tópico



  1. #1
    TheMage
    Visitante

    Padrão Query complicadinha

    Pessoal to quebrando a cabeça com uma query,.. se puderem me ajudar eu agradeço,..

    Tipo é Mysql,.. versão 4.0.x ,.. quero fazer uma limpeza automatica da tabela de users do FreeRadius,.. quer dizer quase isso,.. o pessoal tem que receber avisos antes,...

    Basico das tabelas de:
    logs: -> UserName, StartTime, SessionTime
    checagem: -> UserName

    Na tabela dos users tem todos users ,.. mas na tabela de logs só tem os que ja conectaram,....

    Eu preciso selecionar todos os user que não tiveram conexão dentro de um periodo,.. ou seja ,.. eu preciso selecionar todos os Users da tabela de checagem que não estiverem na tabela de logs ou que o tempo da soma das SessionTime seja menor que x minutos, e contando apenas as que forem mais antigas (StartTime < xData), que uma x data

    Detalhe,... estou atras do modo mais rapido da execução disso ,.. pois são mais de 20.000 users,... ou seja apenas a tabela de checagem tem 20k linhas,.. a de log esta proxima a um milhao (1M) de linhas ,.. .


    Não quis fazer isso na programação,.. gostaria de deixar mais o trabalho pro mysql,.. porem acredito que va pesar pro mysql tmb,.. acho que vou ter que achar um meio termo,...

    Bem se vcs me ajudarem com a query,.. eu me viro em achar o modo mais rapido,.. fazendo uma mistura de uma boa query com um programa bem struturado,.. !


    Vlw,...

  2. #2

    Padrão Query complicadinha

    cara se nao me engano podia fazer uma junçao das duas tabelas, ae ia ter os ips que acessaram, e filtrava o numero de horas la, so sobrando os maiores, depois disso selecionava so os users e diminuia da tabela dos users gerais.

    quando chegar em casa tento fazer isso em sql.

    falows

  3. #3

    Padrão Query complicadinha

    Não manjo nada de mysql, mas talvez o código abaixo pode funcionar....

    DELETE FROM TABELA_USERS WHERE CODIGO_USUARIO=(SELECT CODIGO_USUARIO FROM TABELA_LOG WHERE DATA_CONEXAO>X);

  4. #4
    LenTu
    Visitante

    Padrão Query complicadinha

    Bom podemos dividir em duas partes:
    A primeira morre com um SUB-SELECT.

    SELECT UserName from checagem
    WHERE UserName
    NOT IN(SELECT UserName from logs);

    os usuarios q naum usaram devem aparecer nesse primeiro select.

    SELECT UserName, SessionTime
    FROM logs
    GROUP BY UserName;

    tenho QUASE certeza... que esse segundo select ele irá somar todo o tempo di conexao dos caras pra vc... soh num sei te dizer c vai dah certo pq num posso testar... e pq mexo + com PostgreSQL... fora q vc q ia ter q checar qm tah com tempo minimo estourado ou naum...

    espero q pelo menos uma dessa te ajude... :wink:

    :twisted: :twisted: :twisted: