Ir para conteúdo

POWERED BY:

Arquivado

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

Dian Carlos

SELECT nas tabelas x e y, mas exibir resultados só da tabela x?

Recommended Posts

Bom dia galera.

 

É o seguinte, eu tenho uma tabela de perguntas e respostas, a estrutura está da seguinte maneira:

 

Tabela `ufaq`

 

uFAQPergunta

uFAQResposta

uFAQCategoria

 

Beleza, eu consigo fazer uma busca com REGEXP nos campos 'pergunta' e 'resposta' tranquilamente, mas, eu também preciso fazer a busca no campo 'categoria', o problema é que, esse campo recebe o código da categoria, que está cadastrada em outra tabela, por exemplo;

 

uFAQCategoria = GRayAyZC13

 

Tabela `ucategorias`

 

uCategoriaCode = GRayAyZC13

uCategoriaNome = PAF-ECF

 

O que acontece? Se a pessoa digitar o nome da categoria, no caso aqui 'PAF-ECF', não vai exibir nada, por que os registros da tabela `ufaq`não possuem o nome da categoria e sim o código.

 

Então eu quero saber se tem como quando eu der o REGEXP no campo `uFAQCategoria` ele ir lá na tabela `ucategorias` puxar o valor do campo 'uCategoriaNome' e colocar ali dentro do REGEXP .

 

Exemplo:

 

Pesquisa por PAF-ECF

 

Normalmente ficaria REGEXP "(PAF-ECF)", mas deve ficar REGEXP "(GRayAyZC13)"

 

Tem como fazer isso? Se sim, como fazer ou qual função do MySQL devo usar??

 

Peço desculpas se o título não está correto para a minha dúvida.

 

Mas é isso, agradeço a ajuda de todos..

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você terá que usar o inner join apenas:

 

select a.uFAQPergunta, a.uFAQResposta, b.uCategoriaNome from ufac a
inner join ucategorias b on a.uFAQCategoria = b.uCategoriaCode
where "Aqui você coloca suas condições";

Isso te retornarar todas as suas perguntas e respostas junto com o nome da categoria,

agora, se você quiser pesquisar pelo nome da categoria é só fazer o inverso:

 

select b.uFAQPergunta, b.uFAQResposta, a.uCategoriaNome from ucategorias a
inner join ufac b on a.uCategoriaCode = b.uFAQCategoria
where a.uCategoriaNome = 'PAF-ECF';

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Roberto, agradeço pela ajuda, eu tinha um código com INNER JOIN aqui antigo, adaptei ao meu padrão, mas não funcionou..

 

Está assim:

SELECT * FROM `ufaq` INNER JOIN `ucategorias` ON (`ufaq`.`uFAQCategoria` = `ucategorias`.`uCategoriaCode`) WHERE ((`uFAQPergunta` REGEXP "(' . $uKey . ')")) OR ((`uFAQResposta` REGEXP "(' . $uKey . ')")) OR ((`uFAQCategoria` REGEXP "(' . $uKey . ')"))

Agora não exibe nada mesmo, mesmo se eu digitar algo que exista..

 

O que estou fazendo de errado? Só falta isso pra eu entregar o projeto kkkkk

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem eu conheci esse recurso recentemente.

 

 

Em vez de usa um LIKE estou usando o REGEXP, pois estou melhorando o meu esquema de busca.

 

Ai uso um código PHP para dividir as palavras da frase buscada e coloca ai dentro.

 

Ex.: como fazer login no programa?

$uBusca = $MySQLi->real_escape_string('como fazer login no programa?');

$uKey = explode(' ', $uBusca);
$uKey = implode('|', $uKey);

// Saida: como|fazer|login|no|programa?

http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp

http://imasters.com.br/artigo/1120/

 

Pelo que eu entendi, o REGEXP vai refinar mais a busca, pois em vez de ele buscas a frase inteira, ele vai buscar cada palavra..

 

O importante é que eu testei isso e funcionou, mas com o INNER JOIN não funcionou nada.. Não retornou nem erro..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Véi.. Não deu certo a busca pelo nome da categoria, mas pela pergunta e resposta funcionou sem problemas.

 

Tipo, o nome da categoria é PAF-ECF e o código dela é GRayAyZC13.

 

Se eu digitar PAF-ECF não aparece nada, se eu digitar GRayAyZC13 aparecem as perguntas que pertencem a essa categoria.

 

Isso não pode acontecer, se eu digitar PAF-ECF devem aparecer as perguntas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é porque você esta fazendo errado, faça isso:

 

SELECT * FROM `ufaq` INNER JOIN `ucategorias` ON (`ufaq`.`uFAQCategoria` = `ucategorias`.`uCategoriaCode`) WHERE ((`uFAQPergunta` REGEXP "(' . $uKey . ')")) OR ((`uFAQResposta` REGEXP "(' . $uKey . ')")) OR ((`ucategorias`.`uCategoriaNome` REGEXP "(' . $uKey . ')"))

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.