Ir para conteúdo

POWERED BY:

Arquivado

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

gremio10

Fazer dupla pesquisa

Recommended Posts

Fala galera, eu tenho minha query, tranquila, funcionando, só que eu quero fazer com que ele busque em duas tabelas, que não possuam nenhum tipo de inteligação.

 

tipo:

 

 $sql = $this->select()->from( "my_table" )->where( "id = ?", 1 );

 

queria fazer com que ele busque em duas tabelas, mas na mesma variavel $sql...

 

não sei se consegui me fazer claro...

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Modifique o método from.

 

$sql = $this->select()->from( array("m" => "my_table", "a" => "another_table") )->where( "m.id = ?", 1 )->where("a.id = ?", 1);

 

O primeiro parâmetro do from é a relação de tabelas de onde pesquisar. O segundo parâmetro são as colunas a serem buscadas e o terceiro parâmetro é o nome do banco de dados.

 

Caso tenha dúvidas, consulte a documentação, clicando aqui.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, olha só meu problema...

 

tenho essas duas tabelas:

 

CREATE TABLE `medicamentos` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `ativo` int(1) NOT NULL,
 `cha_tipo` char(1) NOT NULL,
 `nome` varchar(255) NOT NULL,
 `txt_permalink` varchar(255) NOT NULL,
 `keywords` text NOT NULL,
 `imagem` varchar(255) NOT NULL,
 `definicao` text NOT NULL,
 `oque` text NOT NULL,
 `informe_aomedico` text NOT NULL,
 `como_usar` text NOT NULL,
 `outros_usos` text NOT NULL,
 `cuidados_especiais` text NOT NULL,
 `falhar_umadose` text NOT NULL,
 `interacoes` text NOT NULL,
 `efeitos_colaterais` text NOT NULL,
 `como_guardar` text NOT NULL,
 `emergencia_overdose` text NOT NULL,
 `marca_referencia` int(11) NOT NULL,
 `outra_marca` int(11) NOT NULL,
 `rank` int(11) NOT NULL,
 `cod_idioma` int(11) NOT NULL,
 `util_sim` int(11) NOT NULL,
 `util_nao` int(11) NOT NULL,
 `teste` varchar(255) NOT NULL,
 PRIMARY KEY (`id`),
 FULLTEXT KEY `keywords` (`keywords`),
 FULLTEXT KEY `nome` (`nome`),
 FULLTEXT KEY `definicao` (`definicao`)
) ENGINE=MyISAM AUTO_INCREMENT=111 DEFAULT CHARSET=latin1

 

CREATE TABLE `medicamentos_lab` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `profissionais_id` int(11) DEFAULT NULL,
 `file_upload_id` int(11) DEFAULT NULL,
 `medicamentos_lab_tipo_id` int(11) DEFAULT NULL,
 `nome` varchar(200) DEFAULT NULL,
 PRIMARY KEY (`id`),
 FULLTEXT KEY `nome` (`nome`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

 

e fiz essa query:

 

SELECT 
`medicamentos`.*,
`medicamentos_lab`.*,
MATCH( medicamentos.keywords ) AGAINST( 'tylenol' WITH QUERY EXPANSION ) AS `relevance_key`, 
MATCH( medicamentos.nome ) AGAINST( 'tylenol' WITH QUERY EXPANSION ) AS `relevance_nome`, 
MATCH( medicamentos.definicao ) AGAINST( 'tylenol' WITH QUERY EXPANSION ) AS `relevance_definicao`,
MATCH( medicamentos_lab.nome ) AGAINST( 'tylenol' IN BOOLEAN MODE ) AS `relevance_lab_nome`

FROM `medicamentos`, `medicamentos_lab`

WHERE 
	(MATCH( medicamentos.keywords, medicamentos.nome, medicamentos.definicao, medicamentos_lab.nome ) AGAINST( 'tylenol' IN BOOLEAN MODE )) 
ORDER BY 
	`relevance_lab_nome` DESC,
	`relevance_key` DESC, 
	`relevance_nome` DESC, 
	`relevance_definicao` DESC;

 

Só que ele me retorna errado, por que ele lista o conteudo de medicamentos, mas na mesma linha do medicamentos_lab

 

o lab seria nome de marcas e medicamentos, seria principios ativos, no exemplo uso tylenol, que seu principio ativo é paracetamol, então, se o usuário digitar paracetamol, tem de aparecer ele e o tylenol no resultado, sabe ? tanto se ele digitar tylenol, aparecer paracetamol também..

 

:ermm: dificil

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo, mas aí foge do escopo do problema no Zend Framework e passa a ser um problema na montagem da query/modelagem do banco.

 

Qual o banco de dados que você está usando, para movermos o tópico para lá? Depois, se a query estiver montada e a dificuldade for em transpor ela para o ZF, aí é só pedir que alguém move novamente o tópico para cá.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

No campo medicamentos.keywords não deveria vir as chaves de pesquisa, algo do tipo

 

medicamentos
------------
id
nome
keywords

 

01
tylenol
tylenol paracetamol
--
02
generico
paracetamol
--
03
aspirina
aspirina aas acido acetil salicilico

Compartilhar este post


Link para o post
Compartilhar em outros sites

é que o keywords, são palavras chaves para aquele nome, sabe ?

 

tipo:

 

   nome                          keywords
Paracetamol     Acetaminofeno,Dor,Febre,Analgésico,Antipirético

 

no meu medicamentos_lab eu coloco assim:

 

id    profissionais_id    file_upload_id     medicamentos_lab_tipo_id     nome
1             1                1                        1                Tylenol

 

e eu tenho uma outra tabela que é a medicamentos_lab_principios_ativos que tem:

 

CREATE TABLE `medicamentos_lab_principios_ativos` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `medicamentos_lab_id` int(11) DEFAULT NULL,
 `medicamentos_id` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1

 

que aonde contem a listagem dos principios ativos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então no keywords teria o que se quer pesquisar.

 

Palavras x Medicamentos.

 

Certo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não exatamente, por que tylenol é uma marca, não um principio ativo, então eu precisaria diferenciar elas de uma e de outra, e um é cadastrado pelo admin, já as marcas, são cadastradas pelos laboratórios...

 

por isso eu precisaria fazer essa diferenciação e buscar por campos sem nenhum tipo de ligação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria de criar uma outra coluna para esta string de buscas.

Ou até uma 3ª tabela.

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.