Ir para conteúdo

POWERED BY:

Arquivado

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

ricardo_vetor

Busca Avançada

Recommended Posts

Estou desenvolvendo um portal e chegou na hora da busca.

Estou quebrando a cabeça para fazer uma query que faça uma busca em tabelas diferente, com campos diferentes e que me retorne o resulta por categoria.

 

as tabelas são:

 

CODE
TABELA DE FILMES

 

CREATE TABLE `tabfilmes` (

`idFilme` int(11) NOT NULL auto_increment,

`idExi` int(11) NOT NULL,

`titulo` varchar(100) collate latin1_general_ci NOT NULL,

`toriginal` varchar(100) collate latin1_general_ci NOT NULL,

`genero` varchar(150) collate latin1_general_ci NOT NULL,

`ano` char(4) collate latin1_general_ci NOT NULL,

`pais` varchar(50) collate latin1_general_ci NOT NULL,

`distribuidor` varchar(60) collate latin1_general_ci NOT NULL,

`duracao` varchar(10) collate latin1_general_ci NOT NULL,

`idioma` varchar(20) collate latin1_general_ci NOT NULL,

`cor` varchar(10) collate latin1_general_ci NOT NULL,

`direcao` varchar(40) collate latin1_general_ci NOT NULL,

`elenco` varchar(200) collate latin1_general_ci NOT NULL,

`classificacao` varchar(10) collate latin1_general_ci NOT NULL,

`site` varchar(60) collate latin1_general_ci NOT NULL,

`dataLanc` date NOT NULL,

`sinopse` text collate latin1_general_ci NOT NULL,

`ativo` char(1) collate latin1_general_ci default NULL,

`idUser` int(3) NOT NULL,

`tipo` varchar(20) collate latin1_general_ci NOT NULL,

`img` varchar(60) collate latin1_general_ci default NULL,

PRIMARY KEY (`idFilme`),

KEY `idExi` (`idExi`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=142 ;

 

CODE
TABELA DE NOTICIAS

 

CREATE TABLE `tabnoticia` (

`id` int(11) NOT NULL auto_increment,

`comentarios_id` int(11) NOT NULL,

`categorias_id` int(11) NOT NULL,

`titulo` varchar(100) collate latin1_general_ci NOT NULL,

`sub_titulo` varchar(250) collate latin1_general_ci NOT NULL,

`conteudo` text collate latin1_general_ci NOT NULL,

`autor` varchar(45) collate latin1_general_ci NOT NULL,

`status` varchar(13) collate latin1_general_ci NOT NULL,

`fonte` varchar(50) collate latin1_general_ci NOT NULL,

`link` varchar(80) collate latin1_general_ci NOT NULL,

`data_not` date NOT NULL,

`hora_not` time NOT NULL,

`ativar` char(1) collate latin1_general_ci NOT NULL,

`img` varchar(40) collate latin1_general_ci NOT NULL,

`comentario` varchar(150) collate latin1_general_ci NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=85 ;

 

Espero que tenham entendido!!!

 

Obrigado

Ricardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente ser mais específico no que a busca irá fazer e no que irá retornar!

 

Ex.:

 

Primeiro pega o valor digitado no campo busca;

Depois verifica na tabela X, no campo Y a informação digitada;

Depois na tabela Z, no campo W etc...

 

Depois retorna o resultado D...

Compartilhar este post


Link para o post
Compartilhar em outros sites

NecroStylery

Quero buscar a palavra chave; na tabfilmes em titulo, toriginal diretor elenco e sinopse e na tabnoticia quero buscar em titulo, subtiutlo e conteudo.

 

Eu gostaria de saber se tem como fazer tudo em Mysql e pegar um resultado separado por categorias tipo -> notícias e filmes.

 

Obrigado

Ricardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

sendo as tabelas InnoDB, não poderá utilizar o MATCH() AGAINST() do MyISAM, que é uma boa forma de fazer uma busca.

Você pode escolher, usar o LIKE, e procurar de uma forma geral (tive problemas recentemente com minha busca também)

se você fizer:

SELECT `tabfilmes`.`idFilme`,CONCAT_WS(',', `tabfilmes`.`titulo`,`tabfilmes`.`toriginal`,`tabfilmes`.`diretor`,`tabfilmes`.`elenco`,`tabfilmes`.`sinopse`) AS `filmes` FROM `tabfilmes` HAVING `filmes` LIKE '%buscar esse texto%'

 

desta forma, você "cria" uma string chamada "filmes", que pode ser utilizada novamente em outra parte do "HAVING". A string ficaria:

 

título,original,diretor,elenco,sinopse

 

No mesmo SELECT, você poderia fazer um outro CONCAT_WS com o de notícias, só teria que distingüí-las pra não ter problema na hora de voltar com os rows da DB

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Paulo

 

Vou dar uma testada aqui, eu tambem achei o seu tópico sobre a sua busca, vou me giar por ela, achei que ficou meio grande a query mas se funciona e é rapida é o que conta.

 

SDS

Ricardo

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.