Ir para conteúdo

POWERED BY:

Arquivado

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

ewb

inner join

Recommended Posts

Com usar o INNER JOIN ============================

 

 

A SQL abaixo esta correta.... testei e esta ok... mas o segundo exemplo não estou conseguindo ajustar...

 

SELECT 
      tabela.id, tabela.nome, 
      ciclos.id_tabela, ciclos.mes_ano 
FROM tabela I
        INNER JOIN ciclos ON tabela.id = ciclos.id_tabela 
ORDER BY tabela.nome, ciclos.id_tabela, ciclos.mes_ano

 

-------------------------------------------------------------------------------

 

A duvída é ajustar a sql abaixo ... INNER JOIN

 

Há um campo dropdown onde escolho o campo na qual quero filtrar

 

 

<!--#include file="conexao.asp"-->
<%
Dim Conexao

Call Abre_tabelas

var_procurar = Trim(Request.QueryString("campo_procurar"))

if (var_por <> "nome") and (var_por <> "cidade") and (var_por <> "uf") and (var_por <> "mes_ano") then var_por = ""
 
if var_por <> "" then



SQL = "

SELECT 

	   tabela.id, tabela.nome, ciclos.id_tabela, ciclos.mes_ano 

FROM tabela 

	  WHERE " & var_por & " LIKE '%" &  var_procurar & "%' 

[color="#FF0000"]INNER JOIN ciclos ON tabela.id = ciclos.id_tabela [/color]

ORDER BY tabela.nome, ciclos.id_tabela, ciclos.mes_ano ASC;"

end if

set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open SQL, conexao, 3

%>

 

 

 

:

:

 

 

--- drop down para escolha de campo para filtragem ---

 

 

<select name="campo_por" id="campo_por">
			<option value="nome"selected>Cursista</option>
			<option value="cidade">Cidade</option>
			<option value="uf" >Estado</option>
			[color="#FF0000"]<option value="mes_ano">Mes/Ano</option>[/color]
	   </select>

 

Obrigado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade o inner join entra após o from ex:

 

SQL = " SELECT tabela.id, tabela.nome, ciclos.id_tabela, ciclos.mes_ano FROM tabela INNER JOIN ciclos ON tabela.id = ciclos.id_tabela WHERE " & var_por & " LIKE '%" & var_procurar & "%' ORDER BY tabela.nome, ciclos.id_tabela, Ciclos.mes_ano ASC"

 

 

ve se funciona!! abrass

Compartilhar este post


Link para o post
Compartilhar em outros sites

Yessss, perfect....

 

Funcionou.... agora... como faço a "inserção" de um novo registro?

Estou usando duas tabelas

 

tabelas em uso com relacionamento

 

- tabela

- ciclos

 

 

 

<!--#include file="conexao.asp"-->

<%
Dim Conexao
Call Abre_Tabelas

select case Request.QueryString("cadastrar")
case "ok"

var_nome = Trim(Request.Form("campo_nome"))
var_ender = Trim(Request.Form("campo_ender"))
var_bairro = Trim(Request.Form("campo_bairro"))
var_cidade = Trim(Request.Form("campo_cidade"))

[color="#FF0000"]var_ciclos = Trim(Request.Form("campo_mes_ano"))[/color]

if var_nome = "" then var_nome = Chr(10)
if var_ender = "" then var_ender = Chr(10)
if var_bairro = "" then var_bairro = Chr(10)
if var_cidade = "" then var_cidade = Chr(10)

[color="#FF0000"]if var_mes_ano = "" then var_mes_ano = Chr(10)[/color]


var_nome = Replace(var_nome, "<", "<") '1
var_nome = Replace(var_nome, ">", ">")
var_nome = Replace(var_nome, "'", "''")

var_ender = Replace(var_ender, "<", "<") '2
var_ender = Replace(var_ender, ">", ">")
var_ender = Replace(var_ender, "'", "''")

var_bairro = Replace(var_bairro, "<", "<") '3
var_bairro = Replace(var_bairro, ">", ">")
var_bairro = Replace(var_bairro, "'", "''")

var_cidade = Replace(var_cidade, "<", "<") '4
var_cidade = Replace(var_cidade, ">", ">")
var_cidade = Replace(var_cidade, "'", "''")


[color="#FF0000"]var_mes_ano = Replace(var_mes_ano, "<", "<") '17
var_mes_ano = Replace(var_mes_ano, ">", ">")
var_mes_ano = Replace(var_mes_ano, "'", "''")[/color]


SQL = "
INSERT INTO tabela [color="#FF0000"], ciclos [/color](tabela.nome, tabela.ender, tabela.bairro, tabela.cidade, [color="#FF0000"]ciclos.mes_ano[/color]) 
VALUES ('" & var_nome & "','" & var_ender & "','" & var_bairro & "','" & var_cidade  & " ',' " & [b]var_mes_ano[/b] & " ')" 

conexao.execute(SQL)

call fecha_tabelas

Response.Redirect("cursistas.asp")
end select
%>

 

Imagem Postada

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não utiliza-se INNER JOIN junto com INSERT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você vai ter que inserir um de cada vez, ex:

 

INSERT INTO TABELA ( CAMPOS ) VALUES (VALORES)

BUSQUE O CODIGO DE LIGAÇÃO

nestes casos costumo usar o recodset, ex:

rs.open "SELECT * FROM TABELA", conSTR, 3, 3
rs.addnew
rs("CAMPO") = valor
rs("CAMPO2") = valor2
rs.update
'supondo que o campo seria nosso codigo de ligação
rs.movelast
codigo = rs("CAMPO")
rs.close
rs.open "SELCT * FROM CICLOS", conSTR, 3, 3
rs.addnew()
rs("CAMPO") = codigo
rs("CAMPO30") = valor30
rs.update
rs.close

entendeu?

você inseri primero em uma tabela e busca o codigo de ligação, no caso movelast para ir para o ultimo registro inserido,

dai você armazena ele em uma variavel e inseri na outra tabela fazendo assim o LINK, ou ligação entre ambas..

 

se não entendeu alguma coisa posta ai que assim que eu puder eu posto um exemplo mais concreto

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara geralmente eu não gosto de entregar o peixe, prefiro te ensinar a pescar, mais vou quebrar seu galho...

tente assim:

 

<!--#include file="conexao.asp"-->

<%
Dim Conexao
Call Abre_Tabelas

select case Request.QueryString("cadastrar")
case "ok"

var_nome = Trim(Request.Form("campo_nome"))
var_ender = Trim(Request.Form("campo_ender"))
var_bairro = Trim(Request.Form("campo_bairro"))
var_cidade = Trim(Request.Form("campo_cidade"))

var_ciclos = Trim(Request.Form("campo_mes_ano"))

if var_nome = "" then var_nome = Chr(10)
if var_ender = "" then var_ender = Chr(10)
if var_bairro = "" then var_bairro = Chr(10)
if var_cidade = "" then var_cidade = Chr(10)

if var_mes_ano = "" then var_mes_ano = Chr(10)


var_nome = Replace(var_nome, "<", "<") '1
var_nome = Replace(var_nome, ">", ">")
var_nome = Replace(var_nome, "'", "''")

var_ender = Replace(var_ender, "<", "<") '2
var_ender = Replace(var_ender, ">", ">")
var_ender = Replace(var_ender, "'", "''")

var_bairro = Replace(var_bairro, "<", "<") '3
var_bairro = Replace(var_bairro, ">", ">")
var_bairro = Replace(var_bairro, "'", "''")

var_cidade = Replace(var_cidade, "<", "<") '4
var_cidade = Replace(var_cidade, ">", ">")
var_cidade = Replace(var_cidade, "'", "''")


var_mes_ano = Replace(var_mes_ano, "<", "<") '17
var_mes_ano = Replace(var_mes_ano, ">", ">")
var_mes_ano = Replace(var_mes_ano, "'", "''")

set rs = server.createObject("ADODB.RECORDSET")

  rs.open "SELECT * FROM TABELA",conexao,3,3
   rs.addnew()
   rs("nome") = var_nome
   rs("ender") = var_ender
   rs("bairro") = var_bairro
   rs("cidade") = var_cidade
   rs.update()
   rs.movelast
   codigo = rs(0)  'se nao der certo coloque rs("id")
   rs.close
   
   rs.open "SELECT * FROM CICLOS",conexao,3,3
   rs.addnew()
   rs("id_tabela") = codigo
   rs("mes_ano") = var_mes_ano
   rs.update()
   rs.close

set rs = nothing

call fecha_tabelas

Response.Redirect("cursistas.asp")
end select
%>

se não der certo posta ai..

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mauricio, obrigado...

 

Entendo que a intenção é ensinar a pensar e concordo... do que entregar o peixe.... é que em alguns momentos / casos para os pescadores esporádicos comprica... rsrsr

 

 

Estava tentando fazer hoje de manha e agorinha vi o q você escreveu... eu nao tinha definido

 

set rs = server.createObject("ADODB.RECORDSET")

 

e tinha duvida no código

 

rs("id_tabela") = codigo

rs("mes_ano") = var_mes_ano

 

Nao deu certo, ao gravar "um" registro.... ele insere o mesmo registro 8 vezes ...

 

 

 

==== DUVIDA ====

 

Na telinha do cadastro, tenho um campo onde digito o mes_ano, veja dois registros abaixo... mas nao sei que tipo de campo uso ali, pois cada pessoa terá 2, 3 mes_e_ano e no campo atual so posso entrar com um mes e uma ano

 

Ex:

 

----------------------------------------

Nome------ Mes_Ano

----------------------

Mauricio -- 01/2008

------------ 02/2008

------------ 03/2008

----------------------------------------

Pedro------ 01/2008

------------- 02/2008

------------- 03/2008

----------------------------------------

 

Que campo usaria? Como abaixo?

 

 

<select name="select">

 

<option>01/2008</option>

<option>02/2008</option>

 

<option>01/2009</option>

<option>02/2009</option>

 

<option>01/2010</option>

<option>02/2011</option>

 

</select>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está usando VARCHAR para data no seu banco de dados?

Tente usar datetime e usa um conversor da data convencional para a data de formato de banco.

Mesmo por que depois você vai poder utilizar BETWEEN, o que facilitaria demais sua vida no caso de uma consulta de dados orientado a algum tipo de filtro.

 

Olha a função aí:

Function DataNormalParaDataNoFormatoDateTime(ByVal Data)
		Dim Dia, Mes, Ano
		If Not Len(Trim(Data)) = 0 Then
			If IsDate(Data) Then
				If Day(Data) <= 9 Then
					Dia = 0 & Day(Data)
				Else
					Dia = Day(Data)
				End If
				If Month(Data) <= 9 Then
					Mes = 0 & Month(Data)
				Else
					Mes = Month(Data)
				End If
				If Len(Year(Data)) = 2 Then
					If Year(Data) > 50 Then
						Ano = 19 & Year(Data)
					Else
						Ano = 20 & Year(Data)
					End If
				Else
					Ano = Year(Data)
				End If

				Data = Ano & "-" & Mes & "-" & Dia
			End If
		End If
		DataNormalParaDataNoFormatoDateTime = Data
	End Function

Viu? Até o nome da função é bem explicativa.

Bom proveito.

 

Abraços,

Giancarlo Braga

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mauricio, obrigado...

 

Entendo que a intenção é ensinar a pensar e concordo... do que entregar o peixe.... é que em alguns momentos / casos para os pescadores esporádicos comprica... rsrsr

 

 

Estava tentando fazer hoje de manha e agorinha vi o q você escreveu... eu nao tinha definido

 

set rs = server.createObject("ADODB.RECORDSET")

 

e tinha duvida no código

 

rs("id_tabela") = codigo

rs("mes_ano") = var_mes_ano

 

Nao deu certo, ao gravar "um" registro.... ele insere o mesmo registro 8 vezes ...

 

 

 

==== DUVIDA ====

 

Na telinha do cadastro, tenho um campo onde digito o mes_ano, veja dois registros abaixo... mas nao sei que tipo de campo uso ali, pois cada pessoa terá 2, 3 mes_e_ano e no campo atual so posso entrar com um mes e uma ano

 

Ex:

 

----------------------------------------

Nome------ Mes_Ano

----------------------

Mauricio -- 01/2008

------------ 02/2008

------------ 03/2008

----------------------------------------

Pedro------ 01/2008

------------- 02/2008

------------- 03/2008

----------------------------------------

 

Que campo usaria? Como abaixo?

 

 

<select name="select">

 

<option>01/2008</option>

<option>02/2008</option>

 

<option>01/2009</option>

<option>02/2009</option>

 

<option>01/2010</option>

<option>02/2011</option>

 

</select>

 

cara... seguinte...

no banco de dados você precisa setar como DateTime, ou Data/Hora no caso do Access CASO seja uma data completa...

se for apenas o MES e o ANO crie TEXTO, caso seja apenas 1 numero crie inteiro mesmo....

no formulário vai depender....

porque é necessário entender o que você precisa...

no caso de colocar 1 data apelas use um text normal e crie uma mascara de data via javascript...

caso seja muitos valres para o mes_ano você vai precisar criar um list aonde armazene esses valores, dai na hora de salvar no banco será necessario converter em um array...

 

abrass

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mauricio, obrigado...

 

Entendo que a intenção é ensinar a pensar e concordo... do que entregar o peixe.... é que em alguns momentos / casos para os pescadores esporádicos comprica... rsrsr

 

 

Estava tentando fazer hoje de manha e agorinha vi o q você escreveu... eu nao tinha definido

 

set rs = server.createObject("ADODB.RECORDSET")

 

e tinha duvida no código

 

rs("id_tabela") = codigo

rs("mes_ano") = var_mes_ano

 

Nao deu certo, ao gravar "um" registro.... ele insere o mesmo registro 8 vezes ...

 

 

 

==== DUVIDA ====

 

Na telinha do cadastro, tenho um campo onde digito o mes_ano, veja dois registros abaixo... mas nao sei que tipo de campo uso ali, pois cada pessoa terá 2, 3 mes_e_ano e no campo atual so posso entrar com um mes e uma ano

 

Ex:

 

----------------------------------------

Nome------ Mes_Ano

----------------------

Mauricio -- 01/2008

------------ 02/2008

------------ 03/2008

----------------------------------------

Pedro------ 01/2008

------------- 02/2008

------------- 03/2008

----------------------------------------

 

Que campo usaria? Como abaixo?

 

 

<select name="select">

 

<option>01/2008</option>

<option>02/2008</option>

 

<option>01/2009</option>

<option>02/2009</option>

 

<option>01/2010</option>

<option>02/2011</option>

 

</select>

 

cara... seguinte...

no banco de dados você precisa setar como DateTime, ou Data/Hora no caso do Access CASO seja uma data completa...

se for apenas o MES e o ANO crie TEXTO, caso seja apenas 1 numero crie inteiro mesmo....

no formulário vai depender....

porque é necessário entender o que você precisa...

no caso de colocar 1 data apelas use um text normal e crie uma mascara de data via javascript...

caso seja muitos valres para o mes_ano você vai precisar criar um list aonde armazene esses valores, dai na hora de salvar no banco será necessario converter em um array...

 

agora, o porque de estar salvando 8 vzs o mesmo registro é de se pensar.. porque pode ter varias razoes.... primeiro, você criou um loop, segundo esta acontecendo duplicação no deu banco, isso acontece devido algum bug do banco, ja aconteceu comigo uma vez e resolvi usando uma session e um rs.cancel..

 

 

 

 

abrass

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maux,

 

Obrigado pelo retorno e ajuda... vou postar algumas imagens assim talvez o que não consigo me expressar com clareza talvez com teu feeling de desenvolvedor consigar sacar o que quero.

 

Imagem Postada

 

Imagem Postada

 

Imagem Postada

 

Imagem Postada

 

 

- Campo "mes_ano" prefiro campo texto, pode ser?

Penso que é mais fácil para mim, pois se for campo data e lidar com datas ihhhhh acho que ficará mais complicado para mim.... penso...

 

- O que preciso?

Tela de cadastro - ao cadastrar uma pessoa , esta terá mais de um "mes_e_ano" que farão parte do mesmo registro. ( veja imagens )

Isso, reciso fazer para o cadastro - exclusao ( de filhos ) e alteração... o de pesquisa com o INNER JOIN você já me ajudou.. tinha invertido a linha... esta certo agora e funcinando - obrigado.

 

- Array..... what´s this? rsrsrsrsr

 

- Salvando 8 vezes o registro... depois que adicionei o código que você passou é que esta acontecendo isto, e quando apago este registro tambem apaga os 8 registros... com se fosse um único... Cria 8 regs e ao apagar apaga os 8 ..rrsrrs entendeu algo? kkkk espero q sim...

 

- Tentativas... tenha certeza que qdo alguem da IMasters passa alguma dica ou pedaço de código... eu certamente tento fazer algo aqui, pesquiso na net, vejo outros exemplos, tento entende-los e assim por diante....mas é penoso o caminho das stones kkkkkkkk .... para quem nao tem o dominio... mas continuo tentando...

 

Johnny walker = keep on walking <<===>> Newbies = keep on trying - kkkkkkkkkk

 

 

Obrigado novamente a voce e a todos.

 

Tks

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola... alguem nao teria um exemplo de "alunos" e "professores" onde mostra as operacoes básicas

 

- inserir

- exlcuir

- alterar

- pesquisar

 

Poderei me basear neste exemplo....

 

Obrigado

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.