Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 ufaqnã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..
@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
O que esse REGEXP está fazendo ai ?
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..
Mas você testou com o LIKE pra ver se funciona ??
Com o LIKE não aparece nada também.. Se eu tirar a sequencia do INNER JOIN, aparece só a busca na pergunta e na resposta.
Tente usar o LEFT JOIN no lugar do INNER JOIN
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.
é 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 . ')"))
haaa.. Agora sim.. Deu certinho..
@Roberto, muito obrigado pela ajuda e pela paciência..
Resolvido!!
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';