Jump to content


Photo

Como Eu Defino Valores Para Variáveis Somente


  • Faça o login para participar
8 replies to this topic

#1 Celão

Celão

    Marcelo Santino

  • Usuários
  • 525 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro

Posted 20/07/2004, 22:46

opa... blz??

seguinte... eu tenho uma query:
select a.*, b.* from tabela1 a JOIN tabela2 b ON Codtb2=Codtb1 
where a.tipousuario=1 and a.status=1 ORDER BY Codtb1 DESCeu usei o * pra vcs entenderem só a idéia, pq eu seleciono campo por campo dos q u uso.
blz... só que eu tentei usar GROUP BY a.userid (que não é chave primária nem autonum, pois pode repetir na tabela1), só que usando esse atributo, ele não me retorna o último registro daquele usuario (userid) e sim o primeiro (mesmo eu usando ORDER BY Codtb1 DESC - é como se não tivesse utilidade!).

depois, quando eu mostrasse no output os resultados, eu faria uma query pra cada resultado:
<cfoutput query="qr_cod">
<cfquery name="qr_userdados" datasource="#bd#">
select * from fotos where userid=#userid#
</cfquery>essa última query deveria mostrar todos os dados do último registro (somente o último) de cada usuário (pelo group by).

Sendo que isso não está funcionando. Ele não me mostra realmente a última, e sim, uma qualquer, pois o GROUP BY não está funcionando.

teria como eu definir valores de variáveis para o userid antes de realizar a 2ª query evitando que ele pegasse valores duplicados (assim eu poderia eliminar o GROUP By que só está atrapalhando!)?

resumindo: se alguem entendeu o que eu expliquei acima (o q é dificil!!!) como eu defino o valor (são 3 resultados que eu quero) sendo que os 3 teriam q ser obrigatoriamente diferentes?

valeu...
Marcelo Santino - DBA SQL Server/Oracle
Banco de dados e Tecnologia: www.bau-de-dev.com

#2 proteus_adi

proteus_adi

    @handle:=proteus;//>>>

  • Usuários
  • 309 posts
  • Sexo:Não informado
  • Localidade:Minas Gerais&gt;&gt; Belo Horizonte
  • Interesses:Programação e Web&gt;&gt;&gt;

Posted 21/07/2004, 12:00

eu naum tentendi...
e o group by tem umas doideras de soh funcionar se todos os campos selecionados fizerem parte da sentença...
e outra...
ele soh agrupa quando todos os campos são iguais...
PROTEUS [ADSUMUS]
ETERNAL ########
---------------------------------------------------------------
"Já dizia o mestre: PROGRAMAR é diferente de CODIFICAR"...

#3 Celão

Celão

    Marcelo Santino

  • Usuários
  • 525 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro

Posted 21/07/2004, 13:20

como assim se todos os campos forem iguais??

pq ele agruparia os valores, 14, 15, 16, 17 pra não mostrar 5 resultados do userid 14 e mais 10 do userid 15...

como q eu faria isso se ele tem essas doideiras então????
Marcelo Santino - DBA SQL Server/Oracle
Banco de dados e Tecnologia: www.bau-de-dev.com

#4 proteus_adi

proteus_adi

    @handle:=proteus;//>>>

  • Usuários
  • 309 posts
  • Sexo:Não informado
  • Localidade:Minas Gerais&gt;&gt; Belo Horizonte
  • Interesses:Programação e Web&gt;&gt;&gt;

Posted 21/07/2004, 13:50

os campos.. digo os labels dos campos...
entendeu ?
e naum os seus valores...
PROTEUS [ADSUMUS]
ETERNAL ########
---------------------------------------------------------------
"Já dizia o mestre: PROGRAMAR é diferente de CODIFICAR"...

#5 FallenHawk

FallenHawk

    Turista

  • Usuários
  • 32 posts
  • Sexo:Não informado

Posted 22/07/2004, 04:59

Uma sugestão: fazer uma query pra cada usuário encontrado é over demais.

Crie uma lista (usando as funções de lista como listvalue) com os IDs da primeira query e faz essa lista ser separada por vírgulas.

Agora você simplesmente usa essa lista de IDs no campo IN da query.

Ex:

SELECT algo from TABELA where ID IN (#lista#)

Quanto ao problema, eu não entendi ele muito bem, mas creio que é na query. Você também precisa de uma chave primária pra query dar 100% certo e usar no GROUP BY.

Tente algo como:
SELECT
   a.*, b.*
FROM
   tabela1 a 
LEFT JOIN 
   tabela2 b ON (a.userid = b.algum_campo)
WHERE
   a.tipousuario=1 and a.status=1 
GROUP BY
   a.chave_primária
ORDER BY 
   b.algum_campo DESC

// ASAP / Aliança dos Profissionais de Análise de Segurança
// FallenHawk

#6 Pirucask8

Pirucask8

    SouzaColen

  • Usuários
  • 1925 posts
  • Sexo:Não informado
  • Localidade:São Paulo - Capital !!

Posted 24/07/2004, 16:39

Cara, não consigo entender direito o LEFT JOIN..

Ele junta os campo da tabela da esquerda (a) com os da tabela da direita (beer_mug.gif, mas para que? Qual a função exata disso, o que faz esse left join ??
Matheus Colen

Escabroso Produções

#7 FallenHawk

FallenHawk

    Turista

  • Usuários
  • 32 posts
  • Sexo:Não informado

Posted 25/07/2004, 03:46

Cara, não consigo entender direito o LEFT JOIN..

Ele junta os campo da tabela da esquerda (a) com os da tabela da direita -->, mas para que? Qual a função exata disso, o que faz esse left join ??

INNER
-- Pega só se as duas tiverem resultado (acho que é esse que o Celão quer)

LEFT
-- Pega todos da tabela da esquerda mesmo que não haja um valor correspondendo na tabela direita.

RIGHT
-- Pega todos da tabela da direito mesmo que não haja um valor correspondendo na tabela esquerda.

http://www.w3schools...ql/sql_join.asp
// ASAP / Aliança dos Profissionais de Análise de Segurança
// FallenHawk

#8 Celão

Celão

    Marcelo Santino

  • Usuários
  • 525 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro

Posted 25/07/2004, 12:08

SELECT
   a.*, b.*
FROM
   tabela1 a 
LEFT JOIN 
   tabela2 b ON (a.userid = b.algum_campo)
WHERE
   a.tipousuario=1 and a.status=1 
GROUP BY
   a.chave_primária
ORDER BY 
   b.algum_campo DESC

po... blz!!!

mas é exatamente isso que eu faço!

eu uso uma chave primária na query!

só que se eu usar GROUP BY chave_primaria ele não retorna o valor correto do ORDER BY outra_coluna

é como se o GROUP BY anulasse o ORDER BY!

eu estou tendo problemas exatamente com isso.

quando eu só uso ORDER BY ... DESC ele retorna do jeito que eu quero, mas ele mostra resultados repetidos. Quando eu insiro GROUP BY chave_primaria ele não retorna valores repetidos, mas não mostra os últimos (definidos pelo ORDER BY) e sim qualquer um !!!
Marcelo Santino - DBA SQL Server/Oracle
Banco de dados e Tecnologia: www.bau-de-dev.com

#9 Celão

Celão

    Marcelo Santino

  • Usuários
  • 525 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro

Posted 25/07/2004, 12:23

cara... blz... eu consegui o que eu queria.

Quando eu disse uma para cada usuário, não me referia a todos os usuários e sim a cada usuário que eu mostraria (são 3!) hehehe...
então eu acho que não tem problema fazer 3 queryes!

eu fiz assim... peguei o resultado sem GROUP BY e depois no outpus eu user um group !

aí ficou <cfoutput query="query" maxrows="3" group"userid">....


funcionou direitinho, se não fosse o problema desse maxrows não estar servindo em nada!

um pra cada usuário cadastrado (mais de 3!)
Por que ele não limita a 3 se eu user maxrows?

assim... pra resumir, eu tenho:
1 query que pega os registros na tabela1 que sejam iguais à tabela2

daí eu tenho um OUTPUT dessa query

depois (dentro desse output) eu tenho outra query qye pega outros dados individuais desses usuários que foram filtrados (um por um!!!)

Se eu usar maxrows na primeira query ele só vai examinar as 3 primeiras (ou últimas) linhas
Se eu usar maxrows no output ele faz a mesma ação acima
E se eu usar maxrous na terceira query (a individual) ele não funciona como eu queria. Mostra um registro para cada usuário (todos) e deveriam ser somente 3!!!

Edição feita por: Celão, 25/07/2004, 12:31.

Marcelo Santino - DBA SQL Server/Oracle
Banco de dados e Tecnologia: www.bau-de-dev.com




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq