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