Fórum Problema com consulta SQL Composta (MySQL) #557017
13/06/2016
0
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
Curtir tópico
+ 0Posts
13/06/2016
Edcp_poa
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
13/06/2016
Edcp_poa
Gostei + 0
13/06/2016
Edcp_poa
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
Clique aqui para fazer login e interagir na Comunidade :)