Problema com consulta SQL Composta (MySQL)
Prezados:
1 - Primeiramente, desde já, muito obrigado pela ajuda.
2 - No sistema atual, ao inserir o código em um campo específico, a página é redirecionada para o endereço de amostra do produto;
3 - O intuito é ter um único campo de palavra chave que receberá também o código do produto;
4 - Se a nova consulta trouxer um único produto, a página será redirecionada, de outra forma os produtos achados serão amostrados, ou uma mensagem dizendo que nenhum produto com a palavra chave, ou código, foi encontrado;
5 - A consulta verifica a grade do produto (uma outra tabela), porém sem "INNER JOIN" (coloquei dois códigos diferentes, um sem e um com "INNER JOIN", ambos trazem o )
6 - O problema de utilizar com "INNER JOIN" é que trás mais de um valor e eu queria evitar utilizar o DISTINCT (tenho impressão de que ele deixa a consulta mais lenta, ainda que só um pouco).
* Código sem INNER JOIN
* Código com INNER JOIN
Fico no aguardo.
Grande abraço!
1 - Primeiramente, desde já, muito obrigado pela ajuda.
2 - No sistema atual, ao inserir o código em um campo específico, a página é redirecionada para o endereço de amostra do produto;
3 - O intuito é ter um único campo de palavra chave que receberá também o código do produto;
4 - Se a nova consulta trouxer um único produto, a página será redirecionada, de outra forma os produtos achados serão amostrados, ou uma mensagem dizendo que nenhum produto com a palavra chave, ou código, foi encontrado;
5 - A consulta verifica a grade do produto (uma outra tabela), porém sem "INNER JOIN" (coloquei dois códigos diferentes, um sem e um com "INNER JOIN", ambos trazem o )
6 - O problema de utilizar com "INNER JOIN" é que trás mais de um valor e eu queria evitar utilizar o DISTINCT (tenho impressão de que ele deixa a consulta mais lenta, ainda que só um pouco).
* Código sem INNER JOIN
SELECT p.id, p.nome_prod, g.description, p.lnk, p.foto FROM produtos AS p WHERE p.id LIKE CONCAT('%','ARO1000','%') OR (p.fk_grp_prod = 2 AND ( OR p.org_id LIKE CONCAT('%','ARO1000','%') OR p.nome_prod LIKE CONCAT('%','ARO1000','%') OR p.description LIKE CONCAT('%','ARO1000','%') OR p.ctg LIKE CONCAT('%','ARO1000','%') OR p.marca LIKE CONCAT('%','ARO1000','%') OR ( SELECT GROUP_CONCAT(DISTINCT g.id SEPARATOR ' / ') FROM prod_grade AS g WHERE p.id = g.fk_prod_id AND ( g.id LIKE CONCAT('%','ARO1000','%') OR g.id LIKE CONCAT('%','ARO1000','%') OR g.org_id LIKE CONCAT('%','ARO1000','%') OR g.description LIKE CONCAT('%','ARO1000','%') ) ) )
* Código com INNER JOIN
SELECT p.id, p.nome_prod, p.description, p.lnk, p.foto FROM produtos AS p INNER JOIN prod_grade AS g WHERE p.id = g.fk_prod_id AND ( p.id LIKE CONCAT('%','ARO1000','%') OR( p.fk_grp = 2 AND ( OR g.id LIKE CONCAT('%','ARO1000','%') OR g.org_cod LIKE CONCAT('%','ARO1000','%') OR g.description LIKE CONCAT('%','ARO1000','%') OR p.org_cod LIKE CONCAT('%','ARO1000','%') OR p.nome_prod LIKE CONCAT('%','ARO1000','%') OR p.description LIKE CONCAT('%','ARO1000','%') OR p.ctg LIKE CONCAT('%','ARO1000','%') OR p.marca LIKE CONCAT('%','ARO1000','%') ) ) )
Fico no aguardo.
Grande abraço!
Edcp_poa
Curtidas 0
Respostas
Edcp_poa
13/06/2016
* Correção do código com INNER jOIN:
Eu copiei o código errado da primeira vez. este código dá certo.
SELECT DISTINCT p.id, p.nome_prod, p.description, p.lnk, p.foto FROM produtos AS p INNER JOIN prod_grade AS g WHERE p.id = g.fk_prod_id AND ( p.id LIKE CONCAT('%','ARO1000','%') OR( p.fk_grp = 2 AND ( g.id LIKE CONCAT('%','ARO1000','%') OR g.org_cod LIKE CONCAT('%','ARO1000','%') OR g.description LIKE CONCAT('%','ARO1000','%') OR p.org_cod LIKE CONCAT('%','ARO1000','%') OR p.nome_prod LIKE CONCAT('%','ARO1000','%') OR p.description LIKE CONCAT('%','ARO1000','%') OR p.ctg LIKE CONCAT('%','ARO1000','%') OR p.marca LIKE CONCAT('%','ARO1000','%') ) ) )
Eu copiei o código errado da primeira vez. este código dá certo.
GOSTEI 0
Edcp_poa
13/06/2016
ADENDO: ao utilizar a consulta com INNER JOIN, esta traz resultados inconsistentes. Por exemplo, ao buscar pela palavra chave 7246 (existente apenas no código da grade de um produto e código de um outro produto, retornaram 110 linhas, onde na maioria não há incidência destra string.
GOSTEI 0
Edcp_poa
13/06/2016
Encontrei! O problema era realmente a sintaxe e talvez vocês já tenham encontrado qual, mas segue o código corrigido.
Se alguém puder "iluminar" meu conhecimento e dar a conhecer porque a consulta com o INNER JOIN traz 110 registros, ao contrário de 2 registros (como deveria), agradeço.
Espero que esta consulta possa ajudar outros usuários do Fórum.
Grande abraço!
SELECT p.id, p.prod_nome, p.description, p.lnk, p.foto FROM produtos AS p WHERE p.id LIKE CONCAT('%','7246','%') OR (p.fk_grp_prod = 2 AND ( p.org_id LIKE CONCAT('%','7246','%') OR p.prod_nome LIKE CONCAT('%','7246','%') OR p.description LIKE CONCAT('%','7246','%') OR p.categoria LIKE CONCAT('%','7246','%') OR p.marca LIKE CONCAT('%','7246','%') OR ( SELECT GROUP_CONCAT(DISTINCT g.pk_grd SEPARATOR ' / ') FROM prod_grade AS g WHERE p.id = g.fk_prod_id AND ( OR g.id LIKE CONCAT('%','7246','%') OR g.org_id LIKE CONCAT('%','7246','%') OR g.description LIKE CONCAT('%','7246','%') ) ) ) )
Se alguém puder "iluminar" meu conhecimento e dar a conhecer porque a consulta com o INNER JOIN traz 110 registros, ao contrário de 2 registros (como deveria), agradeço.
Espero que esta consulta possa ajudar outros usuários do Fórum.
Grande abraço!
GOSTEI 0