Dúvida com select
04/02/2006
0
Tenho uma tabela2 com os campos composição1 (string) com apenas 1 palavra, composição2 (string) com apenas 1 palavra e o campo reação(string).
Agora a pesquisa: a pessoa digita num edit1 o nome1, e no edit2 o nome2, ao clicar um botão, deverá fazer o seguinte:
1) buscar o nome1 na tabela1, pegar todos as composições contidas no campo composição e montar uma matriz X de M elementos (de acordo com a quantidade de componentes contidos neste campo);
2) buscar o nome2 na tabela1, pegar todos as composições contidas no campo composição e montar uma matriz Y de N elementos (de acordo com a quantidade de componentes contidos neste campo);
3) montar uma combinação entre as duas matrizes, digamos uma matriz Z para jogar o resultado da pesquisa neste matriz;
4) pegar a matriz X[I] e buscar na tabela2 no campo composição1, se achar então pega a matriz Y[I] e busca na tabela2 no campo composição2, caso ache pega o resultado contido na tabela2, campo reação e joga na matriz Z[I].
Eu não tenho problema em criar as matrizes, nem em criar a combinação, o meu problema está em construir esta SQL
Edilcimar
Posts
04/02/2006
Emerson Nascimento
creio que isso seja possível com Stored Procedures.
04/02/2006
Marco Salles
1) buscar o nome1 na tabela1, pegar todos as composições contidas no campo composição e montar uma matriz X de M elementos (de acordo com a quantidade de componentes contidos neste campo);
2) buscar o nome2 na tabela1, pegar todos as composições contidas no campo composição e montar uma matriz Y de N elementos (de acordo com a quantidade de componentes contidos neste campo);
Estas duas etapas acho que pode ser resolvido com sql seguido de um laço para que se monte as matriz X e Y . Ja que se tem no camo composição os componentes separados por Virgula
A terceira e quarta etapa tenho duvidas
Qual seria a estrutura dessa matriz.. Digo em termos de linha e colunas
Por exemplo Na etapa 1) Retorne 3 composicoes Na etapa 2) Retorne 2 Composiçoes
Como seria a estrutura de Z ???
Seria uma matriz Z(3+2,1)... cinco Linhas e Uma Coluna
Seria uma matriz Z(1,3+2)... Uma linha e cinco Colunas
Seria uma matriz Z(3,2)... tres linhas e duas Colunas
Seria uma matriz Z(2,3)... duas linhas e Tres Colunas
Esta etapa para mim é a mais confusa...Pois alem da estrutura da Matriz Z
recorre problema de ordem dos indices. Vejamos :
quem garante que a quantidade de Xi seja igua a quantidade de Yi..
o entendimento desta etapas parece ser a parte mais dificil.. Parece que voce que fazer um combinação de composiçoes..
04/02/2006
Edilcimar
Tabela1 tenho 2 produtos Produto1 e Produto2
Produto1 é composto de (A e B) ->Matriz X[1] = ´A´ e X[2] = ´B´
Produto2 é composto por (A, C, D) -> Matriz Y[1] = ´A´, Y[2] = ´C´ e Y[3] = ´D´
Crio então uma matriz Z que terá 6 elementos para captar o resultado das combinações [AA,AC,AD,BA,BC,BD]
faço agora a pesquisa na Tabela2 pelo elemento X[1] no campo composição1, e depois busco no campo composição2 todos os 3 elementos da matriz Y ou seja Y[1], Y[2] E Y[3] se o resultado for encontrado é porque existe uma reação negativa, então o Z[I] pega este resultado, depois passo para o X[2] e faço o mesmo processo. Então eu teria que:
Z[1] que veio de AA é nulo,
Z[2] que veio de AC é febre
Z[3] que veio de AC é nulo
Z[4] que veio de BA é diarréia
Z[5] que veio de BC é dor de cabeça e vômito
Z[6] que veio de BD é diminuição do efeito de B
Eu até sei montar isto usando for e while, porém com uma tabela deste tamanho e a quantidade de combinações possíveis, iria virar uma carroça, por isto estou querendo fazer com sql
O banco ainda não foi montado, mas pode ser firebird com ibquery ou piradox com query
04/02/2006
Marco Salles
Da dando para entender... Mas para ser dez e ter este resultado
[b:0c609e4c6d]Como voce definiu a sua tabela 2 ???? para mim isto e crucial[/b:0c609e4c6d]
04/02/2006
Edilcimar
04/02/2006
Marco Salles
isto eu entendi , so que não daria para voce definir tb a tabela 2 para que a gente possa a partir de :
e efetuando a pesquisa na tabela 2 chegar no resultado em Z
so para entender melhor :
04/02/2006
Edilcimar
na tabela 1 eu coloquei 2 produtos
Produto1-> A, B, C
Produto2-> A, D, E, F
Na tabela 2 eu coloquei as seguintes reações
A+D -> dor de barriga
A+F -> febre
B+D -> asia
B+E -> náusea
C+E -> diarréia
C+F -> vômito
portanto quando eu procurar por estes 2 produtos o resultado da matriz z terá que ser o acima mais os campos nulos
04/02/2006
Edilcimar
04/02/2006
Marco Salles
mas em relação a tabela 2
vejo um problema na construção da mesma.. Talvez tenha que sempre que inserir uma combinação de medicamentos , voce deva faze-lo também na ordem inversa , ou uma outra saida e fazer uma pesquisa de X[i] pelo campo composicao2 se achar pesquise também Y[i] pelo campo Cpmposicao1 , simultaneamente
Porque por exemplo , na tabela 2 pode estar cadastrado
A + D = Dor de barriga , mas não necessáriamente pode estar cadastrado
D + A = Dor de barriga
[b:19d60c8dfa]concorda com esta colocação ????[/b:19d60c8dfa]
04/02/2006
Edilcimar
04/02/2006
Marco Salles
então vamos ver se da tempo para acabar hoje
antes de irmos para o sql , voce conhece alguma função que separa pela virgula as composiçoes
acho que ja ate fiz um código desse aqui
vou pesquisar
04/02/2006
Edilcimar
04/02/2006
Marco Salles
procedure CriarMatrizX(Composicao:String); var i,indiceanterior:integer; texto:String; begin i:=1; indiceAnterior:=1; while i <= length(composicao) do begin if composicao[i]=´;´ then begin texto:=copy(composicao,indiceanterior,i - indiceAnterior); indiceAnterior:=i+1; //aqui voce vaui criar a MatrizX[i] form1.Memo1.Lines.Add(texto); end; i:=i+1; end; end;
Clique aqui para fazer login e interagir na Comunidade :)