Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dinaerteneto

monitorando ações do usuário

Recommended Posts

Estou com alguns problemas em fazer relacionamento.meu problemaconsigo exibir os usuarios que que fizeram upload, os que vão fazer o download,uma vez que este já possui os campos preenchidos assim o arquivo é enviado.Entretanto não consigo trazer o usuario que removeu o arquivoquando no caso o campo idUsuarioDel contiver registroOlha sótenho uma tabela que registro os uploads:Upload (Estrutura)idUpLoad id do uploadidUsuarioUp id do user que subiu o arquivoidUsuarioDown id do user que ira fazer o dowidUsuarioDel id do user que removel o arquivodataUp data do uploaddataDel data em que o arquivo foi removidoarquivo nome do arquivoext extensaosize tamanhodesc descricaostatus se removido ou se ativoUsuarios (Estrutura)idUsuarionomedataCademailacessologinsenhaativonem precisa de explicaçãomeu select SELECT A.idUsuario, A.nome as nomeUp,B.idUsuario, B.nome as nomeDown,C.idUpLoad, C.idUsuarioUp, C.idUsuarioDown, C.idUsuarioDel,C.arquivo, date_format(C.dataUp, '%d/%m/%Y') as dataUp,date_format(C.dataDel, '%d/%m/%Y') as dataDel,C.statusFROM usuarios A, usuarios B, upload CWHERE A.idUsuario = C.idUsuarioUpAND B.idUsuario = C.idUsuarioDownAND C.arquivo LIKE '$_POST[arquivo]%'AND C.status LIKE '$_POST[status]%'deu pra entender alguma coisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo...Realmente, muito difícil entender, pois você não conseguiu traduzir em palavras o seu pensamento...No entanto, parece que você está confundindo relacionamento com comparação...Assim, separe bem "comparar" de "relacionar", ou seja, "where" de "join"...Tente descrever melhor seu objetivo, mais ou menos assim:Estou com alguns problemas em fazer relacionamento."preciso fazer uma consulta contendo nomes de arquivos, datas e horários, e os nomes dos usuarios que fizeram o download, o upload ou a remoção desses arquivos"Seria por aí?Ah...E uma boa leitura de livros sobre técnicas de redação e até um pouco de filosofia :) também ajuda heim!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos tentar novamente então...Estou desenvolvendo um sistema de uploads, no qual irá existir a troca de arquivos entre administradores e usuários.Os administradores(idUsuarioUp) podem selecionar quem são os usuários que podem fazer o download do arquivo (idUsuarioDown).O arquivo pode ser removido futuramente, então preciso saber quem foi o usuário que removeu o arquivo(idUsuarioDel), afim de obter um log deste arquivo.Quero exibir para o administrador algo comonome do arquivo | Enviado Por | Usuário Download | Removido por | Data Envio | Data Removido | arquivo1 adm1 user1 adm1 04-09-07 05-09-07arquivo2 adm2 user3 adm2 04-09-07 05-09-07arquivo3 adm1 user4 adm1 04-09-07 05-09-07possuo duas tabelas (upload e usuarios),o meu problema, não de comparação (where) e sim de relacionamento(inner).Na tabela de upload possuo 4 id, sendo eles:idUpload (é auto-increment. - apenas para identificar o upload que foi feito)idUsuarioUp (o id de quem fez o upload do arquivo)idUsuarioDel (o id de quem)Upload (Estrutura)idUpLoad id do uploadidUsuarioUp id do user que subiu o arquivoidUsuarioDown id do user que ira fazer o dowidUsuarioDel id do user que removel o arquivodataUp data do uploaddataDel data em que o arquivo foi removidoarquivo nome do arquivoext extensaosize tamanhodesc descricaostatus se removido ou se ativoUsuarios (Estrutura)idUsuarionomedataCademailacessologinsenhaativoAcredito que agora seja possível entender o que estou tentando fazer.Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá...

 

Você precisa relacionar algumas colunas de uma tabela com uma só coluna

em outra tabela...

 

Não terei tempo de "traduzir" suas queries... então, de forma similar, tenho uma consulta que lista os três últimos fornecedores de um produto. Assim:

 

tabela: fornecedores

colunas: codigo, nomerazsoc

 

tabela: estoque

colunas: codigo, descricao, fornec1, fornec2, fornec3

 

Preciso listar os produtos, com as colunas:

codigo, descricao, codigo do fornecedor1, nome do fornecedor 1, codigo e nome dos fornecedores 2 e 3...

 

O que fiz foi criar três subqueries, que "relacionam", respectivamente, o

codigo do fornecedor1 com a tabela de fornecedores, e, sucessivamente,

os fornecedores 2 e 3 também.

 

Executar esta query em uma tabela de estoque com 16mil registros e 250

fornecedores, através do SQLExplorer (Delphi) com ODBC em modo "Server", por uma conexão de

Internet de 100k, levou 23 segundos na primeira execução, sendo o servidor um AthlnoXP2200 512mb

e o cliente um PentiumIV 1.6 com 512mb e 16 segundos nas subsequentes...:

 

select estoque.descricao, estoque.codigo,	   estoque.fornec1, query1fornecedor,	   estoque.fornec2, query2fornecedor,	   estoque.fornec3, query3fornecedorfrom `acme`.`estoque` estoqueinner join  (select estquery1.codigo query1codigo, fornec1.nomerazsoc query1fornecedor   from `acme`.`fornecedores` fornec1   inner join `acme`.`estoque` estquery1	 on (fornec1.codigo=estquery1.fornec1)  ) as query1on (estoque.codigo=query1.query1codigo)inner join  (select estquery2.codigo query2codigo, fornec2.nomerazsoc query2fornecedor   from `acme`.`fornecedores` fornec2   inner join `acme`.`estoque` estquery2	 on (fornec2.codigo=estquery2.fornec2)  ) as query2on (estoque.codigo=query2.query2codigo)inner join  (select estquery3.codigo query3codigo, fornec3.nomerazsoc query3fornecedor   from `acme`.`fornecedores` fornec3   inner join `acme`.`estoque` estquery3	 on (fornec3.codigo=estquery3.fornec3)  ) as query3on (estoque.codigo=query3.query3codigo)

Acrescentando uma validação para selecionar um ou poucos registros, a query demorou "um piscar

de olhos":

 

where estcodi between '001001' and '001999'; (todos os produtos do grupo "001")

 

ou

 

where estcodi = "001172";

 

Não há possibilidade de um campo de fornecedor ficar vazio (no mínimo, é "00000")

Se houvesse a possibilidade do campo ser null, em troca de "inner join,"

deveria ser "left outer join"

 

Ok?

 

Caso funcione, não deixa de atualizar o post para [resolvido] ok?

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT A.idUsuario, A.nome AS nomeUp,B.idUsuario, B.nome AS nomeDown, D.idUsuario, D.nome AS nomedel,C.idUpLoad, C.idUsuarioUp, C.idUsuarioDown, C.idUsuarioDel,C.arquivo,date_format(C.dataUp, '%d/%m/%Y') AS dataUp,date_format(C.dataDel, '%d/%m/%Y') AS dataDel,C.STATUSFROM usuarios A, usuarios B, usuarios D, upload CWHERE A.idUsuario = C.idUsuarioUpAND B.idUsuario = C.idUsuarioDownAND D.idUsuario = C.idUsuarioDelAND C.arquivo LIKE '$_POST[arquivo]%'AND C.STATUS LIKE '$_POST[status]%'

ve se assim funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande Kandrade...Já havia tentando desta forma,e é aí que está o problema, pois desta forma apenas trarei os arquivos que já foramremovidos, uma vez que o campo C.idUsuarioDel só é preenchido quando o arquivo é excluído.Desde já agradeço novamente a ajuda.

SELECT A.idUsuario, A.nome AS nomeUp,B.idUsuario, B.nome AS nomeDown, D.idUsuario, D.nome AS nomedel,C.idUpLoad, C.idUsuarioUp, C.idUsuarioDown, C.idUsuarioDel,C.arquivo,date_format(C.dataUp, '%d/%m/%Y') AS dataUp,date_format(C.dataDel, '%d/%m/%Y') AS dataDel,C.STATUSFROM usuarios A, usuarios B, usuarios D, upload CWHERE A.idUsuario = C.idUsuarioUpAND B.idUsuario = C.idUsuarioDownAND D.idUsuario = C.idUsuarioDelAND C.arquivo LIKE '$_POST[arquivo]%'AND C.STATUS LIKE '$_POST[status]%'

ve se assim funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problema resolvido galera...Na verdade eu estava precisando usar o LEFT JOINque trás todos os registros da tabela esquerda independenteda tabela da direita...Obrigado a todos que responderam, ou que pelo menos passarampor aqui e tentaram ajudar.flws

SELECT A.idUpAdmin, A.idUsuarioUp, A.idUsuarioDown, A.idUsuarioDel,A.arquivo, date_format(A.dataUp, '%d/%m/%Y') as dataUp,date_format(A.dataDel, '%d/%m/%Y') as dataDel,A.status,B.idUsuario, B.nome as nomeUp,C.idUsuario, C.nome as nomeDown,D.idUsuario, D.nome as nomeDel FROM upAdmin A LEFT JOIN usuarios D ON A.idUsuarioDel = D.idUsuario,usuarios C, usuarios BWHERE A.idUsuarioUp = B.idUsuarioAND A.idUsuarioDown = C.idUsuarioAND A.arquivo LIKE '$_POST[arquivo]%'AND A.status LIKE '$_POST[status]%'

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.