Jump to content
Daniivo

Query de busca

Recommended Posts

Daniivo

Buenas tardes.

o Objectivo è fazer uma busca como a Google, ou seja, ele vai fazer uma leitura de varias tabelas e se por exemplo o valor "joao" estiver em algum campo ele aparece o utilizador joao.

SELECT * from asegurados, aseguradoras, poliza, seguros WHERE
asegurados.id_seguros=seguros.id_seguros
AND asegurados.id_poliza=poliza.id_poliza
AND asegurados.id_aseguradoras=aseguradoras.id_aseguradoras AND bi = 'teste1' and name='teste1'

se eu fizer isto apenas com uma condição funciona ou seja

SELECT * from asegurados, aseguradoras, poliza, seguros WHERE
asegurados.id_seguros=seguros.id_seguros
AND asegurados.id_poliza=poliza.id_poliza
AND asegurados.id_aseguradoras=aseguradoras.id_aseguradoras AND name='joao'

no entanto se tiver mis que uma ele repete valores a toa

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
HappyHippyHippo

1º - o teu português é muito difícil de perceber !!

2º - apresenta cada SQL com a lista de resultados

3º - diz exatamente o que pretendes e não consegues

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Daniivo

1º - o teu português é muito difícil de perceber !!

2º - apresenta cada SQL com a lista de resultados

3º - diz exatamente o que pretendes e não consegues

lool

bonito post,

eu quando li nem eu percebi o que tinha la escrito...

Edited by Daniivo

Share this post


Link to post
Share on other sites
pmg

Usa UNION.

seleccionas todos os "jooes" duma tabela, mais todos os "jooes" doutra ...

select nome, cor_dos_olhos from tabela1 where nome like 'joao'
union
select nome, cor_dos_olhos from tabela2 where nome like 'joao'
union
select nome, cor_dos_olhos from tabela3 where nome like 'joao'


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Daniivo

Usa UNION.

seleccionas todos os "jooes" duma tabela, mais todos os "jooes" doutra ...

select nome, cor_dos_olhos from tabela1 where nome like 'joao'
union
select nome, cor_dos_olhos from tabela2 where nome like 'joao'
union
select nome, cor_dos_olhos from tabela3 where nome like 'joao'

nao è tao simples assim!!!

è que a busca nao quero se seja apenas pelos nomes mas tb pelas polices BIs datas de nascimento etc etc

Edited by Daniivo

Share this post


Link to post
Share on other sites
HappyHippyHippo

valores à toa não são ... isto porque estás a pedir os dados das 4 tabelas ...

se queres somente um campo de uma tabela:

select tabela.campo from ...

se queres vários campos de uma tabela:

select tabela.campo1, tabela.campo2 from ...

se quiseres todos os campos de uma única tabela

select tabela.* from ...

se quiseres todos os campos de uma única tabela mais um campo de outra

select tabela1.*, tabela2.campo from ...

e por ai fora ...

agora para filtrar é só adicionar as condições mas não te esqueças de dizer de que tabela é

... where tabela1.campo like '%joao%' or tabela2.campo like '%joao%'

Edited by HappyHippyHippo
  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Daniivo

valores à toa não são ... isto porque estás a pedir os dados das 4 tabelas ...

se queres somente um campo de uma tabela:

select tabela.campo from ...

se queres vários campos de uma tabela:

select tabela.campo1, tabela.campo2 from ...

se quiseres todos os campos de uma única tabela

select tabela.* from ...

SELECT * from asegurados, aseguradoras, poliza, seguros WHERE

asegurados.id_seguros=seguros.id_seguros

AND asegurados.id_poliza=poliza.id_poliza

AND asegurados.id_aseguradoras=aseguradoras.id_aseguradoras AND name='joao'

como podes ver isso est a ser feito aqui.

name='joao' ->funciona !!

AND bi = 'joao' or name='joao' -> vários echos

joao vem em uma variavel Post do form pesquisa....

Edited by Daniivo

Share this post


Link to post
Share on other sites
HappyHippyHippo

tens a certeza que isto está correto :

...
and asegurados.id_aseguradoras=aseguradoras.id_aseguradoras
...

esquece ... eu é que vi mal

no entanto se continuas a ter uma lista de registos não esperados de duas um

- ou tens vários registos com 'bi' e 'name' com o valor de 'teste1'

- ou tens registos com os id's iguais (o que leva a repetição na projeção)

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pmg

nao è tao simples assim!!!

è que a busca nao quero se seja apenas pelos nomes mas tb pelas polices BIs datas de nascimento etc etc

SELECT nome, cor_dos_olhos FROM tabela1 WHERE nome LIKE '%joao%' or bi like '%joao%' or datanascimento like '%joao%'
UNION
SELECT nome, cor_dos_olhos FROM tabela2 WHERE nome LIKE '%joao%' or bi like '%joao%' or datanascimento like '%joao%'
UNION
SELECT nome, cor_dos_olhos FROM tabela3 WHERE nome LIKE '%joao%' or bi like '%joao%' or datanascimento like '%joao%'


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Daniivo

eu n estou a conceguir por isto a fincionar, o asegurados.nombre like "sddsa" or poliza like "dsad" se eu procurar um nome funciona!! se meter uma poliza ele repete a base de dados toda e mais 1 , ou seja deve ser os IDs que estao repetidos mas porque precisaso de estar!!!

os id_seguros estao repetidos nos asegurados, porque precisao de estar, e isto deve estar a fazer barracadas....

Share this post


Link to post
Share on other sites
HappyHippyHippo

tens de perceber como os resultados são criados

um exemplo com duas tabelas

+-----------+   +-----------------+
| tabela_1  |   |    tabela_2     |
+-----------+   +-----------------+
| id | nome |   | id | ref | nome |
+----+------+   +-----------------+
|  1 | nom1 |   |  1 |   1 | nom1 |
|  2 | nom2 |   |  2 |   1 | nom2 |
+----+------+   |  3 |   2 | nom3 |
               +-----------------+

se fizeres

select * from tabela_1, tabela_2

terás o seguinte resultado

+-----------+-----------------+
| tabela_1  |     tabela_2    |
+----+------+----+-----+------+
| id | nome | id | ref | nome |
+----+------+----+-----+------+
|  1 | nom1 |  1 |   1 | nom1 |
|  1 | nom1 |  2 |   1 | nom2 |
|  1 | nom1 |  3 |   2 | nom3 |
|  2 | nom2 |  1 |   1 | nom1 |
|  2 | nom2 |  2 |   1 | nom2 |
|  2 | nom2 |  3 |   2 | nom3 |
+----+------+----+-----+------+

isto porque ele simplesmente faz corresponder a cada elemento de uma tabela todos da segunda.

neste caso terás 2(registos)*3(registos) = 6(registos).

no caso de ter mais do que duas tabelas terás o número de registos multiplicados pelo número de registos dessa tabela extra

no entanto o que se faz é escolher os registos que nos interessa, normalmente é a correspondência/relação entre campos das duas tabelas (daí o nome de modelo relacional), que nesta situação é o campo id da tabela_1 com o campo ref da tabela_2

select * from tabela_1, tabela_2 where tabela_1.id = tabela_2.ref

sendo assim terás o seguinte resultado

+-----------+-----------------+
| tabela_1  |     tabela_2    |
+----+------+----+-----+------+
| id | nome | id | ref | nome |
+----+------+----+-----+------+
|  1 | nom1 |  1 |   1 | nom1 |
|  1 | nom1 |  2 |   1 | nom2 |
|  2 | nom2 |  3 |   2 | nom3 |
+----+------+----+-----+------+

como vês, a condição tabela_1.id = tabela_2.ref +e válida em todos os casos do resultado que é um subconjunto da lista anterior

quando aplicas uma condição no teu SQL estás a filtrar registos da tabela original que é criada da maneira que te apresentei inicialmente.

conclusão : verifica os campos das tuas tabelas e as relações dadas pelas condições do SQL, depois determina o que deveria aparecer dentro dos moldes que te apresentei aqui e verás que não é "lixo" que aparece mas sim os dados das tabelas

nota : quando o query retorna mais do que um campo com o mesmo nome (no caso que te apresentei podes ver que existem mais do que um campo id) o PHP escolhe um dos dois ou mais, a ordem de seleção não sei, mas é um ponto que deverás ter em conta


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
M6

Aconselho-te a usares Solr.

Simplifica-te imenso uma vez que deixas de ter de pesquisar em n tabelas.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.