Pedro Schneider

Um pouco sobre minha vida, trabalhos, estudos, diversões entre outros!

ORDER BY conforme tua necessidade no MYSQL

Muitas vezes já precisei fazer uma query para trazer um registro, caso não tenha, trazer outro, algumas vezes fiz com UNION e outras SUBQUERYs, sei que a query ficava gigante ou até mesmo “Gabiarrada”.

Mas dessa vez quis otimizar a query e pesquisei um pouco sobre, descobri para o MYSQL uma ótima solução!

Vejamos aqui o antes e o depois de uma query que busca os Banners conforme a seção do site, caso eu não tenha banner na seção produto, traz o da home!

SELECT * FROM site_banner b
JOIN mgr_secao_site ss ON b.SecaoSiteID = ss.SecaoSiteID AND ss.Url = "produto"
WHERE b.Ativo = 1 LIMIT 1
UNION
SELECT * FROM site_banner b
JOIN mgr_secao_site ss ON b.SecaoSiteID = ss.SecaoSiteID AND ss.Url = "home"
WHERE b.Ativo = 1 LIMIT 1

Não que a query acima não funcione, mas é que fica grande, olha só como solucionei usando o IN() e o FIELD():

SELECT * FROM site_banner b
JOIN mgr_secao_site ss ON b.SecaoSiteID = ss.SecaoSiteID AND ss.Url IN ( "produto", "home" )
ORDER BY FIELD( ss.Url, "' . $SecaoSiteUrl . '", "home" ) LIMIT 1;
posted by correaschneider in Desenv,Dicas,MySQL,SQL,Uncategorized and have No Comments

Relacionando Tabelas N:N na query de consulta

SELECT `dmCanal`.`Descricao`
FROM `PessoaCanal`
INNER JOIN `dmCanal` ON `PessoaCanal`.`CanalID` = `dmCanal`.`CanalID`
WHERE `PessoaCanal`.`PessoaID` =  40

Resultado:

Utilizando a query acima deve-se utilizar com a função group_concat()

Ex:

SELECT
`Pessoa`.`PessoaID`,
(
SELECT GROUP_CONCAT(`dmCanal`.`Descricao`)
FROM `PessoaCanal`
INNER JOIN `dmCanal` ON `PessoaCanal`.`CanalID` = `dmCanal`.`CanalID`
WHERE `PessoaCanal`.`PessoaID` =  `Pessoa`.`PessoaID`
) AS Canais
FROM
`Pessoa`

Resultado:

posted by correaschneider in Desenv,Dicas,MySQL and have No Comments