Daniivo Posted July 16, 2012 at 08:06 PM Report Share #468939 Posted July 16, 2012 at 08:06 PM 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 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 16, 2012 at 08:10 PM Report Share #468940 Posted July 16, 2012 at 08:10 PM (edited) 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 July 16, 2012 at 08:10 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Daniivo Posted July 16, 2012 at 08:12 PM Author Report Share #468941 Posted July 16, 2012 at 08:12 PM (edited) 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 July 16, 2012 at 08:20 PM by Daniivo Link to comment Share on other sites More sharing options...
pmg Posted July 16, 2012 at 08:19 PM Report Share #468943 Posted July 16, 2012 at 08:19 PM 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! Link to comment Share on other sites More sharing options...
Daniivo Posted July 16, 2012 at 08:22 PM Author Report Share #468945 Posted July 16, 2012 at 08:22 PM (edited) 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 July 16, 2012 at 08:24 PM by Daniivo Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 16, 2012 at 08:23 PM Report Share #468946 Posted July 16, 2012 at 08:23 PM (edited) 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 July 16, 2012 at 08:26 PM by HappyHippyHippo 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Daniivo Posted July 16, 2012 at 08:26 PM Author Report Share #468948 Posted July 16, 2012 at 08:26 PM (edited) 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 July 16, 2012 at 08:28 PM by Daniivo Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 16, 2012 at 08:31 PM Report Share #468950 Posted July 16, 2012 at 08:31 PM (edited) 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 July 16, 2012 at 08:34 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
pmg Posted July 16, 2012 at 11:08 PM Report Share #468969 Posted July 16, 2012 at 11:08 PM 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! Link to comment Share on other sites More sharing options...
Daniivo Posted July 17, 2012 at 03:45 PM Author Report Share #469015 Posted July 17, 2012 at 03:45 PM 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.... Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 17, 2012 at 06:19 PM Report Share #469032 Posted July 17, 2012 at 06:19 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
M6 Posted July 18, 2012 at 11:06 PM Report Share #469220 Posted July 18, 2012 at 11:06 PM 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." Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now