
t0th
Membros-
Total de itens
16 -
Registro em
-
Última visita
Sobre t0th

t0th's Achievements
0
Reputação
-
Olá, mas acho que isso não resolve meu problema... obrigado
-
Olá, tenho que seguinte situação, temos um comparador de preços, os produtos vem de lojas. Um produto pode vir com nomes diferentes. Exemplo: Notebook apple macbook 15 , esse produto pode vir das lojas com nomes diferentes: NB apple mac-book 15 notebook apple macbook 15 apple notebook mac-book 15 ...assim por diante... podendo ter variações dos nomes entre lojas diferentes. Pergunto: como posso fazer isso? Quando procurar por exemplo: Notebook apple macbook 15 ele mostrar 'esse produto esta em 5 lojas diferentes'. Ele teria que procurar semelhanças entre os nomes dos produtos e eleger quais são os semelhantes. Como posso fazer isso sem que seja um trabalho manual? Att.
-
olá, se tiver alguém que pode me ajudar com esse problema eu pago pelo trabalho... só me mandar uma MP obrigado e espero resposata
-
Olá, modifiquei algumas coisas: CREATE TABLE IF NOT EXISTS `produtos` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `lojas_id` int(10) unsigned NOT NULL DEFAULT '0', `nome` varchar(60) DEFAULT NULL, `codigo` varchar(15) DEFAULT NULL, `preço` varchar(10) DEFAULT NULL, `descc` text, `foto` varchar(200) DEFAULT NULL, `lastUpdate` varchar(22) NOT NULL, PRIMARY KEY (`id`), KEY `prod_nome2` (`nome`), FULLTEXT KEY `prod_nome` (`nome`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=96227 ; essa query: ---------------------- SELECT sql_cache produtos.nome,produtos.preço,lojas.nome as nomeLoja, site, produtos.id FROM produtos inner join lojas on lojas.id = produtos.lojas_id where (LOCATE('hd', produtos.nome) or MATCH (produtos.nome) AGAINST (' "HD EXT" "HD IDE" "HD SATA" "HD SCSI" "HD EXTERNO" "NB HD" "HARD DISK" "HD * P/ NOTEBOO" "HD 160" "HD 1.5TB " "HD 250" "HD 320" "HD 400 " "HD 500" "HD 640" "HD 750" "HD 80" "HD EXT " "HD EXTERNO" "HD IDE" "HD NB" "HD NTB" "HD SATA" "HD SCSI" "HD SSD" "HD USB" "HD-NB" "HD-NOTEBOOK" "NTB HD" ' IN BOOLEAN MODE)) and lojas.publish=1 ORDER BY produtos.nome ----------------------- mesma que: SELECT sql_cache produtos.nome,produtos.preço,lojas.nome as nomeLoja, site, produtos.id FROM produtos inner join lojas on lojas.id = produtos.lojas_id where ( produtos.nome LIKE '%hd%' or produtos.nome LIKE '%HD EXT%' or produtos.nome LIKE '%HD IDE%' or produtos.nome LIKE '%HD SATA%' or produtos.nome LIKE '%HD SCSI%' or produtos.nome LIKE '%HD EXTERNO%' or produtos.nome LIKE '%NB HD%' or produtos.nome LIKE '%HARD DISK%' or produtos.nome LIKE '%HD * P/ NOTEBOO%' or produtos.nome LIKE '%HD 160%' or produtos.nome LIKE '%HD 1.5TB %' or produtos.nome LIKE '%HD 250%' or produtos.nome LIKE '%HD 320%' or produtos.nome LIKE '%HD 400 %' or produtos.nome LIKE '%HD 500%' or produtos.nome LIKE '%HD 640%' or produtos.nome LIKE '%HD 750%' or produtos.nome LIKE '%HD 80%' or produtos.nome LIKE '%HD EXT %' or produtos.nome LIKE '%HD EXTERNO%' or produtos.nome LIKE '%HD IDE%' or produtos.nome LIKE '%HD NB%' or produtos.nome LIKE '%HD NTB%' or produtos.nome LIKE '%HD SATA%' or produtos.nome LIKE '%HD SCSI%' or produtos.nome LIKE '%HD SSD%' or produtos.nome LIKE '%HD USB%' or produtos.nome LIKE '%HD-NB%' or produtos.nome LIKE '%HD-NOTEBOOK%' or produtos.nome LIKE '%NTB HD%') and lojas.publish=1 order by produtos.nome fiz um explain nas duas queries e dá o seguinte: *************************** 1. row *************************** id: 1 select_type: SIMPLE table: produtos type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 42080 Extra: Using where; Using filesort *************************** 2. row *************************** id: 1 select_type: SIMPLE table: lojas type: eq_ref possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: lojasnoparagua.produtos.lojas_id rows: 1 Extra: Using where alguém pode me dizer se essas queries estão usando o índice? no phpMyAdmin a cardinalidade: prod_nome2 INDEX 42080 prod_nome FULLTEXT 1 muito obrigado e desde já agaredeço
-
alguma sugestão, galerA? obrigado
-
Olá, Denis, agradeço suas respostas rápidas... VALE LEMBRAR QUE A query com o LOCATE retorna o resultado desejado: MUITO OBRIGADO! executei o comando acima com EXPLAIN e retornou: consulta SQL: explain SELECT straight_join SQL_CACHE produtos.nome, produtos.preço, lojas.nome AS nomeLoja, site, produtos.id FROM produtos force INDEX ( prod_nome ) INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE ( ( MATCH ( produtos.nome ) AGAINST ( '+notebook' IN BOOLEAN MODE ) ) OR LOCATE( 'nb', produtos.nome ) <>0 ) AND lojas.publish =1 order by produtos.nome asc \G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: produtos type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 36535 Extra: Using where; Using filesort *************************** 2. row *************************** id: 1 select_type: SIMPLE table: lojas type: eq_ref possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: lojasnoparagua.produtos.lojas_id rows: 1 Extra: Using where 2 rows in set (0.00 sec) ainda me parce que não usou o índice INDEX prod_nome nem o FULLTEXT para sua pergunta, não.. não há índice para lojas.publish , vale lembrar que esse valor é sempre 0 ou 1 muito obrigado
-
deixei os dois indices rodei a primeira query e tive o seguinte resultado: consulta SQL: EXPLAIN SELECT SQL_CACHE produtos.nome, produtos.preço, lojas.nome AS nomeLoja, site, produtos.id FROM produtos INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE (MATCH (produtos.nome) AGAINST ( '+notebook' IN BOOLEAN MODE)) OR LOCATE('nb', produtos.nome) AND lojas.publish =1; Registros: 2 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE produtos ALL NULL NULL NULL NULL 36453 Using where 1 SIMPLE lojas eq_ref PRIMARY PRIMARY 4 lojasnoparagua.produtos.lojas_id 1 Using where está usando o índice? pra mim parece que não.. testei a outra query e fica: consulta SQL: EXPLAIN SELECT SQL_CACHE produtos.nome, produtos.preço, lojas.nome AS nomeLoja, site, produtos.id FROM produtos USE INDEX (prod_nome) INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE (MATCH (produtos.nome) AGAINST ('+notebook' IN BOOLEAN MODE)) OR LOCATE('nb', produtos.nome) AND lojas.publish =1; Registros: 2 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE produtos ALL NULL NULL NULL NULL 36453 Using where 1 SIMPLE lojas eq_ref PRIMARY PRIMARY 4 lojasnoparagua.produtos.lojas_id 1 Using where não sei se esta usando index aqui.. obrigado e espero resposta
-
olá, obrigado pela resposta removo o indice fulltext do nome antes? obrigado
-
olá, obrigado pela resposta mudei o parenteses de lugar pra usar certo o concat SELECT SQL_CACHE produtos.nome, produtos.preço, lojas.nome AS nomeLoja, site, produtos.id FROM produtos INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE MATCH (produtos.nome) AGAINST (CONCAT( '+notebook', " ", '+nb ' ) IN BOOLEAN MODE) AND lojas.publish =1 o resultado é o mesmo que a query que te passei antes mas o problema é que ele não está pegando os registro com 'nb ' só os 'notebook' lendo em http://dev.mysql.com/doc/refman/4.1/pt/ful...ine-tuning.html meu servidor ta setado 'ft_min_word_len=3' minimo 3 carecteres.. estranho que tem espaço ali após o 'nb' => 'nb ' não tenho acesso as configurações do servidor pra mudar o valor de ft_min_word para 2 e meu host me disse que não poderia! alguma sugestão? muito obrigado
-
Olá, SELECT sql_cache produtos.nome,produtos.preço,lojas.nome as nomeLoja, site, produtos.id FROM produtos inner join lojas on lojas.id = produtos.lojas_id WHERE ( MATCH (produtos.nome) AGAINST ('+notebook' IN BOOLEAN MODE) or MATCH (produtos.nome) AGAINST ('+nb ' IN BOOLEAN MODE)) and lojas.publish=1 só retorna os registro com notebook não retorna os 'nb ' alguém sabe o que pode ser? obrigado
-
olá, obrigado pela resposta.. dei uma estudada e cheguei a essa 'conversão' a query: SELECT sql_cache produtos.nome,produtos.precco,lojas.nome as nomeLoja, site, produtos.id FROM produtos inner join lojas on lojas.id = produtos.lojas_id where ( produtos.nome LIKE '%processador%' or produtos.nome LIKE '%cpu%') and produtos.nome LIKE '%intel%' and lojas.publish=1 para: SELECT produtos.nome, produtos.precco, lojas.nome AS nomeLoja, site, produtos.id FROM produtos INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE (MATCH (produtos.nome) AGAINST ('+processador' IN BOOLEAN MODE) or MATCH (produtos.nome) AGAINST ('+cpu' IN BOOLEAN MODE) ) and MATCH (produtos.nome) AGAINST ('+intel' IN BOOLEAN MODE) AND lojas.publish =1 ta certo isso ou tem alguma maneira para melhorar? obrigado
-
valeu, Denis.. mas como ficaria a query sem os LIKE? obrigadão
-
olá, modifiquei todas as tabelas para MyISAM pode me sugerir quais campos para indice FULLTEXT? obrigado
-
ola, os indices são: Nome chave Tipo Campo PRIMARY PRIMARY 37826 id lojas_id INDEX 37 lojas_id codigo INDEX 37826 codigo tipo da tabela produtos: InnoDB não posso retirar o LIKE, pois ai acabaria com a minha pesquisa.. para trocar para MyISAM teria que trocar as tabelas pai para MyISAM, certo? não acabaria com minhas chaves extrangeiras? quais campos posso criar indice FULLTEXT? nome? obrigado
-
Olá, tenho a seguinte tabela: CREATE TABLE IF NOT EXISTS `produtos` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `lojas_id` int(10) unsigned NOT NULL DEFAULT '0', `nome` varchar(60) DEFAULT NULL, `codigo` varchar(15) DEFAULT NULL, `preço` varchar(10) DEFAULT NULL, `descc` text, `foto` varchar(200) DEFAULT NULL, `lastUpdate` varchar(22) NOT NULL, PRIMARY KEY (`id`), KEY `lojas_id` (`lojas_id`), KEY `codigo` (`codigo`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=62123; -- -- Restrições para a tabela `produtos` -- ALTER TABLE `produtos` ADD CONSTRAINT `produtos_ibfk_1` FOREIGN KEY (`lojas_id`) REFERENCES `lojas` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; tenho essa query: SELECT SQL_CACHE produtos.nome, produtos.preço, lojas.nome AS nomeLoja, site, produtos.id FROM produtos INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE ( produtos.nome LIKE '%Estabilizador%' OR produtos.nome LIKE '%ESTAB.%' OR produtos.nome LIKE '%ESTAB%' ) AND produtos.nome LIKE '%1000%' AND produtos.nome LIKE '%110%' AND lojas.publish =1 ORDER BY produtos.nome ASC LIMIT 0 , 100 tenho 35 mil registro... e tem horas que a query(essa query em cima depende do que o usuário digita) demora uns 10 segundos pra retornar deixando meu server/site off obrigado e espero resposta