KUROL3 3 Denunciar post Postado Dezembro 5, 2007 Vamos ver se isso é possivel estou tentando fazer um busca que ordena os resultados por palavras repetidas no registro... tipo assim: //supomos que tenha um campo no banco com as palavras chaves para o registro X com nome palavras_chaves $string_busca = 'moveis, sofa de couro, sofa de napa, sofa amarelo'; //aqui temos 3 palavras sofa //supomos que tenha um campo no banco com as palavras chaves para o registro Y com nome palavras_chaves $string_busca = 'sofa de napa, sofa amarelo, azul'; //aqui temos 2 palavras sofa //se eu fizer o select * from tabela where palavras_chaves like = '%sofa%' order by palavras_chaves asc vai ordenar primeiro o registro que inicia com Moveis.. não tem como ordenar pelo registo que tem mais palavras repetidas.. vixi .. rsrs casou casei complicou compliquei...kkk abraco Marco Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Dezembro 6, 2007 você teria que ter uma tabela com as palavras chaves repetidas tipo 'sofa' para entao o banco saber o q você considera como sendo repetição, afinal o banco nao faz ideia de que sofa eh alguma coisa. mas lógico que da pra fazer uma "consultinha" para achar isso... para a consulta funcionar basta você definir os tipos no %like% tanto em cima como embaixo... Deve ter outra maneira de fazer isso, mas agora eu nao pensei em nenhuma Select cde.palavra_chave, cde.tipo , xyz.qtde from (Select palavra_chave , case when palavra_chave like '%sofa%' then 'sofa' when palavra_chave like '%moveis%' then 'moveis' when palavra_chave like '%cadeira%' then 'cadeira' else 'outros' end as tipo from tabela )as cde INNER JOIN ( select tipo, count(tipo) as qtde from ( Select palavra_chave , case when palavra_chave like '%sofa%' then 'sofa' when palavra_chave like '%moveis%' then 'moveis' when palavra_chave like '%cadeira%' then 'cadeira' else 'outros' end as tipo from tabela ) as abc Group by tipo )as xyz ON cde.tipo=xyz.tipo ORDER by xyz.qtde DESC Compartilhar este post Link para o post Compartilhar em outros sites
KUROL3 3 Denunciar post Postado Dezembro 6, 2007 Teria como explicar esse select cabuloso...rsrsr Rapaz.. to vendo que nao sei nada de comando do mysql.. rsrsrsr..... (vou mostrar abaixo minha tabela por completo tabela nome = clientes campos id cliente endereco bairro site email descricao palavras_chaves eu rodei o select ele so exibiu 3 campos.... é possível fazer issu Select cde.palavras_chaves, cde.tipo , xyz.qtde from (Select palavras_chaves , case when cliente like '%sofa%' then 'sofa' when descricao like '%sofa%' then 'sofa' when palavras_chaves like '%sofa%' then 'sofa' else 'outros' end as tipo from clientes )as cde INNER JOIN ( select tipo, count(tipo) as qtde from ( Select palavras_chaves , case when cliente like '%sofa%' then 'sofa' when descricao like '%sofa%' then 'sofa' when palavras_chaves like '%sofa%' then 'sofa' else 'outros' end as tipo from clientes ) as abc Group by tipo )as xyz ON cde.tipo=xyz.tipo ORDER by xyz.qtde DESC deu pra entender ou eu confidi tudo .. rsrs tem que contar não so dentro das palavras chaves mas tb na descricao e no cliente. abraco e valeu pelo post...... Marco Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Dezembro 6, 2007 A Select com os campos todos: Select cde.* , xyz.qtde from (Select * , case when palavra_chave like '%sofa%' then 'sofa' when palavra_chave like '%moveis%' then 'moveis' when palavra_chave like '%cadeira%' then 'cadeira' else 'outros' end as tipo from clientes )as cde INNER JOIN ( select tipo, count(tipo) as qtde from ( Select palavra_chave , case when palavra_chave like '%sofa%' then 'sofa' when palavra_chave like '%moveis%' then 'moveis' when palavra_chave like '%cadeira%' then 'cadeira' else 'outros' end as tipo from clientes ) as abc Group by tipo )as xyz ON cde.tipo=xyz.tipo ORDER by xyz.qtde DESC No que consiste a consulta: Acima do INNER JOIN eu verifico qual o tipo do item Abaixo do INNER JOIN eu verifico a quantidade e conto o tipo de cada item No INNER JOIN eu junto as duas informaçoes.... Se você trabalhasse numa empresa em que o DBA come capim e relincha alto como na minha e as tabelas nao tem nexo ou sentido (normalizaçao nao existe) você faria essas selects de cabeça Quanto a sua pergunta o que eh possivel? Compartilhar este post Link para o post Compartilhar em outros sites
KUROL3 3 Denunciar post Postado Dezembro 6, 2007 Bom vamos as dúvidas.... meu select ficou da seguinte forma............... $query_complemento vem de um $explode = explode(' ', $str_busca); foreach($explode as $chave => $valor){ //considera somente as palavras com mais de 2 caracteres if (strlen($valor) > 2){ $query_complemento .= "WHEN palavras_chaves LIKE '%".addslashes($valor)."%' THEN '".addslashes($valor)."' WHEN empresa LIKE '%".addslashes($valor)."%' THEN '".addslashes($valor)."' WHEN descricao LIKE '%".addslashes($valor)."%' THEN '".addslashes($valor)."' "; } } //comando utilizado $comando = "SELECT cde. * , xyz.qtde FROM ( SELECT * , CASE $query_complemento END AS tipo FROM clientes ) AS cde INNER JOIN ( SELECT tipo, count( tipo ) AS qtde FROM ( SELECT palavras_chaves, CASE $query_complemento END AS tipo FROM clientes ) AS abc GROUP BY tipo ) AS xyz ON cde.tipo = xyz.tipo ORDER BY xyz.qtde DESC"; verfique online como ficou http://www.pradopolis.net/imasters.php mas quando eu busco móveis por exemplo ele acha 9 em todos pq issu.. no link acima esta exibindo o comando SQL introduzido no banco.... aguardo KUROLE Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Dezembro 7, 2007 você descaralhou a consulta toda.... você manda buscar em TODOS os campos, como todas as lojas tem "moveis" no nome vai logico achar um monte de lojas Compartilhar este post Link para o post Compartilhar em outros sites