Ir para conteúdo

POWERED BY:

Arquivado

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

KUROL3

contar no select

Recommended Posts

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.