Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Maykel-ctba

ORDER BY coluna que vem de subquery, é possível?

Recommended Posts

Bom dia!

Tenho a seguinte query:

SELECT * FROM sistema_cliente c 
INNER JOIN sistema_assinatura_cliente ac ON ac.cliId = c.cliId 
WHERE cliAtivo = 'S' 
AND cliExcluido = 'N' 
AND c.cidId IN (
    SELECT cidId FROM sistema_assinatura_cidade 
    WHERE cidId IN (2878)
) 
AND c.cliId IN (
    SELECT cliId FROM sistema_assinatura a 
    INNER JOIN sistema_assinatura_cliente ac ON ac.assId = a.assID 
    INNER JOIN sistema_assinatura_plano ap ON ap.assId = a.assID
    WHERE ap.aspSituacao = 3
) 
ORDER BY
    CASE
        WHEN 'ap.plaId' is 11 THEN 1
        WHEN 'ap.plaId' is 10 THEN 2
        WHEN 'ap.plaId' is 09 THEN 3
    END
LIMIT 0,15

Estou com problemas ao executar este ORDER By! Não sei se a sintaxe que utilizei é a apropriada. O campo 'ap.plaId' consta na segunda subquery (AND c.cliId IN...).

Isso é possível? Caso não, como posso fazer? Terei que fazer mais uma subquery para o Order By?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma solucão:

 Transforme a subquery em uma tabela virtual ,  trazendo a coluna que se quer , e faça um join , tem a coluna agora para ordenar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, meio nas escuras, não sei se tem erro, mas veja a ideia, se seria possível:
 

SELECT * FROM sistema_cliente c 
INNER JOIN sistema_assinatura_cliente ac ON ac.cliId = c.cliId 
INNER JOIN (
        SELECT cliId, ap.aspSituacao,ap.plaId FROM sistema_assinatura a 
        INNER JOIN sistema_assinatura_cliente ac ON ac.assId = a.assID 
        INNER JOIN sistema_assinatura_plano ap ON ap.assId = a.assID
        WHERE ap.aspSituacao = 3
) ap ON c.cliId = ap.cliId
WHERE cliAtivo = 'S' 
AND cliExcluido = 'N' 
AND c.cidId IN (
    SELECT cidId FROM sistema_assinatura_cidade 
    WHERE cidId IN (2878)
) 
ORDER BY
    CASE
        WHEN 'plaId' is 11 THEN 1
        WHEN 'plaId' is 10 THEN 2
        WHEN 'plaId' is 09 THEN 3
    END
LIMIT 0,15

Atualização: Fiz uma alteração

Compartilhar este post


Link para o post
Compartilhar em outros sites

@EdCesar, obrigado pela dica!

 

Infelizmente deu Syntax Error... até tentei botar aspas para ver se era este o problema... mas deu na mesma.

 

Citar

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''11' THEN 1 WHEN 'plaId' is '10' THEN 2 WHEN 'plaId' is '09' T' at line 17 )

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, Maykel-ctba disse:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''11' THEN 1 WHEN 'plaId' is '10' THEN 2 WHEN 'plaId' is '09' T' at line 17 )


Esqueci o campo plaId, atualizei a query com ele, da uma olhada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado @EdCesar pela atenção!

 

Ainda ocorre o erro. Tentei também trocar a instrução IS por =, mas o erro ainda é o mesmo. Também tentei inserir um CASE para cada caso do order (vi assim em alguns exemplos), mas também ocorre a mesma coisa...

 

Usando seu exemplo:

SELECT * FROM sistema_cliente c 
INNER JOIN sistema_assinatura_cliente ac ON ac.cliId = c.cliId 
INNER JOIN (
        SELECT cliId, ap.aspSituacao,ap.plaId FROM sistema_assinatura a 
        INNER JOIN sistema_assinatura_cliente ac ON ac.assId = a.assID 
        INNER JOIN sistema_assinatura_plano ap ON ap.assId = a.assID
        WHERE ap.aspSituacao = 3
) ap ON c.cliId = ap.cliId
WHERE cliAtivo = 'S' 
AND cliExcluido = 'N' 
AND c.cidId IN (
    SELECT cidId FROM sistema_assinatura_cidade 
    WHERE cidId IN (2878)
) 
ORDER BY
    CASE
        WHEN 'plaId' is 11 THEN 1
    CASE
        WHEN 'plaId' is 10 THEN 2
    CASE
        WHEN 'plaId' is 09 THEN 3
    END
Citar

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE WHEN plaId = '10' THEN 2
    CASE WHEN plaId = '09' THEN 3
    END
LIMIT' at line 17 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma coisa que reparei é que se eu tirar o Order By, roda legal a query (porém, sem ordenar, claro). Mas não está retornando como antes...

Ele está retornando registros repetidos que tem mais de um registro em sistema_assinatura_plano, por causa do segundo INNER JOIN. Não tem como não utilizar este Join? hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ideia do inner join é "simular" a tabela virtual que o @Mota sugeriu. Acredito que o esses são os caminhos...
Só um adendo para a palavra case, que deve ser usada apenas uma vez:

    CASE
        WHEN 'plaId' = 11 THEN 1
        WHEN 'plaId' = 10 THEN 2
        WHEN 'plaId' = 09 THEN 3
    END

Se algo me clarear aqui, dou um retorno. Até lá, boa sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais uma tentativa rs
 

SELECT * FROM sistema_cliente c 
INNER JOIN sistema_assinatura_cliente ac ON ac.cliId = c.cliId 
INNER JOIN (
            SELECT cliId,
            CASE
                WHEN ap.plaId = 11 THEN 1
                WHEN ap.plaId = 10 THEN 2
                WHEN ap.plaId = 09 THEN 3
            END AS novo_plaId
        FROM sistema_assinatura a 
            INNER JOIN sistema_assinatura_cliente ac ON ac.assId = a.assID 
            INNER JOIN sistema_assinatura_plano ap ON ap.assId = a.assID
            WHERE ap.aspSituacao = 3
        ) ap
ON ap.cliId = c.cliId
WHERE cliAtivo = 'S' 
AND cliExcluido = 'N' 
AND c.cidId IN (
    SELECT cidId FROM sistema_assinatura_cidade 
    WHERE cidId IN (2878)
) 
AND c.cliId IN (
    SELECT cliId FROM sistema_assinatura a 
    INNER JOIN sistema_assinatura_cliente ac ON ac.assId = a.assID 
    INNER JOIN sistema_assinatura_plano ap ON ap.assId = a.assID
    WHERE ap.aspSituacao = 3
) 
ORDER BY novo_plaId
LIMIT 0,15

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@EdCesar

 

Retornaram 3 resultados! Deveria resultar 2 (um retornou duplicado, acredito que pelo INNERJOIN). Mas pelo visto, retornou na ordem certa ao menos! Acredito que com um GROUP BY deverá sanar a situação.

 

Mas.... We have a problem now.

 

Além destes 3 CASES, terão outros casos de ORDER BY que ainda não coloquei, que farão buscas em outras tabelas também. Desta maneira com o CASE feito diretamente INNER JOIN, não saberei como colocar as demais condições de ordem, pois elas não tem relação com esta tabela. Caso o ORDER BY ficasse lá por ultimo, fora das subquerys, eu poderia pensar nisso mais a frente, mas como a estrutura da query sugerida é bem diferente, não sei como farei.

 

Vou explicar a necessidade por completo:

 

Este é um sistema de busca de usuários. Neste sistema, a lista de busca deverá listar:

  • Primeiro, os usuários com assinaturas que tem plano GOLD (ID 11 lá do ORDER BY)
  • Depois, usuários com assinaturas SILVER (ID 10)
  • Depois, usuários com assinaturas BRONZE (ID 9)
  • Depois, membros com as maiores avaliações (outra tabela, tabela sistema_avaliacao - que deverá fazer uma média das somas)
  • Depois, ordem alfabética

Desta maneira que vocês sugeriram, será possível fazer algo assim? Ou terei que mexer algo na estrutura da query?

 

Como não conheço nenhum Fiddle de MySQL, segue um dump de exemplo das tabelas (estou enviando apenas o necessário, hehe)

 

CREATE TABLE IF NOT EXISTS `sistema_assinatura` (
  `assId` int(11) NOT NULL,
  `assDataCadastro` datetime NOT NULL,
  `assAtivo` enum('S','N') NOT NULL,
  `assExcluido` enum('S','N') NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

INSERT INTO `sistema_assinatura` (`assId`, `assDataCadastro`, `assAtivo`, `assExcluido`) VALUES
(1, '2017-04-14 22:42:33', 'S', 'N'),
(4, '2017-04-25 21:56:48', 'S', 'N');

CREATE TABLE IF NOT EXISTS `sistema_assinatura_cidade` (
  `ascId` int(11) NOT NULL,
  `assId` int(11) NOT NULL,
  `cidId` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;

INSERT INTO `sistema_assinatura_cidade` (`ascId`, `assId`, `cidId`) VALUES
(21, 1, 2878),
(22, 1, 3135),
(23, 1, 2806),
(24, 1, 2894),
(25, 1, 2824),
(26, 1, 4549),
(27, 1, 5270),
(28, 4, 2878),
(29, 4, 4549),
(30, 4, 5270),
(31, 4, 4500),
(32, 4, 3135);

CREATE TABLE IF NOT EXISTS `sistema_assinatura_cliente` (
  `ascId` int(11) NOT NULL,
  `assId` int(11) NOT NULL,
  `cliId` int(11) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

INSERT INTO `sistema_assinatura_cliente` (`ascId`, `assId`, `cliId`) VALUES
(1, 1, 1),
(2, 2, 3),
(3, 3, 4),
(4, 4, 5);

CREATE TABLE IF NOT EXISTS `sistema_assinatura_plano` (
  `aspId` int(11) NOT NULL,
  `aspSituacao` int(1) NOT NULL,
  `aspDataVencimento` int(2) NOT NULL,
  `assId` int(11) NOT NULL,
  `plaId` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

INSERT INTO `sistema_assinatura_plano` (`aspId`, `aspSituacao`, `aspDataVencimento`, `assId`, `plaId`) VALUES
(1, 3, 14, 1, 1),
(2, 3, 14, 1, 9),
(5, 3, 26, 4, 1);

CREATE TABLE IF NOT EXISTS `sistema_avaliacao` (
  `avaId` int(11) NOT NULL,
  `avaVotadoId` int(11) NOT NULL,
  `avaEleitorId` int(11) NOT NULL,
  `avaComentario` varchar(255) NOT NULL,
  `avaNota` enum('1','2','3','4','5') NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

INSERT INTO `sistema_avaliacao` (`avaId`, `avaVotadoId`, `avaEleitorId`, `avaComentario`, `avaNota`) VALUES
(1, 1, 1, 'Teste', '5');

CREATE TABLE IF NOT EXISTS `sistema_cidade` (
  `cidId` int(11) NOT NULL,
  `cidNome` varchar(120) CHARACTER SET latin1 DEFAULT NULL,
  `estId` int(5) DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=5565 DEFAULT CHARSET=utf8;

INSERT INTO `sistema_cidade` (`cidId`, `cidNome`, `estId`) VALUES
(2878, 'Curitiba', 18);

CREATE TABLE IF NOT EXISTS `sistema_cliente` (
  `cliId` int(11) NOT NULL,
  `cliPerfil` enum('C','R') NOT NULL,
  `cliNome` varchar(255) NOT NULL,
  `cliEmail` varchar(255) NOT NULL,
  `cliSenha` varchar(255) NOT NULL,
  `cidId` int(11) NOT NULL,
  `estId` int(11) NOT NULL,
  `cliDataNascimento` date NOT NULL,
  `cliCPF` varchar(255) NOT NULL,
  `cliTelefone` varchar(25) NOT NULL,
  `cliResumo` varchar(500) NOT NULL,
  `cliImagem` varchar(255) NOT NULL,
  `cliDataCadastro` datetime NOT NULL,
  `cliAtivo` enum('S','N') NOT NULL,
  `cliExcluido` enum('S','N') NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

INSERT INTO `sistema_cliente` (`cliId`, `cliPerfil`, `cliNome`, `cliEmail`, `cliSenha`, `cidId`, `estId`, `cliDataNascimento`, `cliCPF`, `cliTelefone`, `cliResumo`, `cliImagem`, `cliDataCadastro`, `cliAtivo`, `cliExcluido`) VALUES
(1, 'C', 'Maykel Esser', 'maykelesser@teste.com', '21232f297a57a5a743894a0e4a801fc3', 2878, 18, '1988-03-22', '04992271901', '(41) 98401-2834', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In consequat sem id ligula semper, eget blandit neque tincidunt. Donec quis sodales lorem, eget aliquam est. Donec sodales tellus lectus, at lobortis eros suscipit quis. Curabitur tincidunt mattis elit, quis aliquam risus laoreet eget.', '45-25042017231434.png', '2017-04-14 00:29:09', 'S', 'N'),
(5, 'C', 'Ivan', 'ivan@teste.com', '21232f297a57a5a743894a0e4a801fc3', 2878, 18, '0000-00-00', '04992271901', '(32) 13123-1231', 'teste', '', '2017-04-25 21:56:10', 'S', 'N');

CREATE TABLE IF NOT EXISTS `sistema_planos` (
  `plaId` int(11) NOT NULL,
  `plaTitulo` varchar(255) NOT NULL,
  `plaModalidade` enum('M','T','S','A') NOT NULL,
  `plaValor` float NOT NULL,
  `plaCidades` int(11) NOT NULL,
  `plaDescricao` text NOT NULL,
  `plaDataCadastro` datetime NOT NULL,
  `plaAtivo` enum('S','N') NOT NULL,
  `plaExcluido` enum('S','N') NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

INSERT INTO `sistema_planos` (`plaId`, `plaTitulo`, `plaModalidade`, `plaValor`, `plaCidades`, `plaDescricao`, `plaDataCadastro`, `plaAtivo`, `plaExcluido`) VALUES
(1, 'Tradicional', 'M', 19.9, 5, '<ul>  <li>Contempla at&eacute; 5 cidades</li>   <li>Receba notifica&ccedil;&otilde;es realtime</li>   <li>Demandas ilimitadas</li> </ul>', '2017-04-11 00:00:00', 'S', 'N'),
(2, 'Tradicional', 'T', 49.9, 5, '<ul>  <li>Contempla at&eacute; 5 cidades</li>   <li>Receba notifica&ccedil;&otilde;es realtime</li>   <li>Demandas ilimitadas</li> </ul>', '2017-04-11 00:00:00', 'S', 'N'),
(3, 'Tradicional', 'S', 89.9, 5, '<ul>  <li>Contempla at&eacute; 5 cidades</li>   <li>Receba notifica&ccedil;&otilde;es realtime</li>   <li>Demandas ilimitadas</li> </ul>', '2017-04-11 00:00:00', 'S', 'N'),
(4, 'Tradicional', 'A', 129.9, 5, '<ul>\r\n <li>Contempla at&eacute; 5 cidades</li>\r\n <li>Receba notifica&ccedil;&otilde;es realtime</li>\r\n <li>Demandas ilimitadas</li>\r\n</ul>\r\n', '2017-04-11 00:00:00', 'S', 'N'),
(5, 'Escritório', 'M', 59.9, 10, '<ul>  <li>Contempla at&eacute; 10 cidades</li>  <li>Receba notifica&ccedil;&otilde;es realtime</li>   <li>Demandas ilimitadas</li> </ul>', '2017-04-11 00:00:00', 'S', 'N'),
(6, 'Escritório', 'T', 149.9, 10, '<ul>   <li>Contempla at&eacute; 10 cidades</li>  <li>Receba notifica&ccedil;&otilde;es realtime</li>   <li>Demandas ilimitadas</li> </ul>', '2017-04-11 00:00:00', 'S', 'N'),
(7, 'Escritório', 'S', 269.9, 10, '<ul>   <li>Contempla at&eacute; 10 cidades</li>  <li>Receba notifica&ccedil;&otilde;es realtime</li>   <li>Demandas ilimitadas</li> </ul>', '2017-04-11 00:00:00', 'S', 'N'),
(8, 'Escritório', 'A', 389.9, 10, '<ul>\n <li>Contempla at&eacute; 10 cidades</li>\n  <li>Receba notifica&ccedil;&otilde;es realtime</li>\n <li>Demandas ilimitadas</li>\n</ul>\n', '2017-04-11 00:00:00', 'S', 'N'),
(9, 'Benefícios - Bronze', 'M', 3, 15, '<ul>\r\n  <li>Cadastro de at&eacute; 15 cidades</li>\r\n  <li>Melhor colocado nas pesquisas, independente da avalia&ccedil;&atilde;o.</li>\r\n  <li>N&atilde;o incluso no newsletter</li>\r\n</ul>\r\n', '2017-04-11 00:00:00', 'S', 'N'),
(10, 'Benefícios - Prata', 'M', 7, 45, '<ul>\r\n  <li>Cadastro de at&eacute; 45 cidades</li>\r\n  <li>Topo da pesquisa, independente da avalia&ccedil;&atilde;o.</li>\r\n <li>N&atilde;o incluso no newsletter</li>\r\n</ul>\r\n', '2017-04-11 00:00:00', 'S', 'N'),
(11, 'Benefícios - Ouro', 'M', 14, 0, '<ul>\n <li>Cadastro ilimitado de cidades</li>\n  <li>Destaque no topo das buscas</li>\n  <li>Incluso no newsletter mensal</li>\n</ul>\n', '2017-04-11 00:00:00', 'S', 'N');

CREATE TABLE IF NOT EXISTS `sistema_usuario` (
  `usuId` int(11) NOT NULL,
  `usuNome` varchar(255) NOT NULL,
  `usuEmail` varchar(255) NOT NULL,
  `usuSenha` varchar(32) NOT NULL,
  `usuDataCadastro` datetime NOT NULL,
  `usuAtivo` enum('S','N') NOT NULL,
  `usuExcluido` enum('S','N') NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

INSERT INTO `sistema_usuario` (`usuId`, `usuNome`, `usuEmail`, `usuSenha`, `usuDataCadastro`, `usuAtivo`, `usuExcluido`) VALUES
(1, 'Administrador', 'maykelesser@gmail.com', '21232f297a57a5a743894a0e4a801fc3', '2016-02-18 12:47:52', 'S', 'N');

ALTER TABLE `sistema_assinatura`
  ADD PRIMARY KEY (`assId`);

ALTER TABLE `sistema_assinatura_cidade`
  ADD PRIMARY KEY (`ascId`);

ALTER TABLE `sistema_assinatura_cliente`
  ADD PRIMARY KEY (`ascId`);

ALTER TABLE `sistema_assinatura_plano`
  ADD PRIMARY KEY (`aspId`);

ALTER TABLE `sistema_avaliacao`
  ADD PRIMARY KEY (`avaId`);

ALTER TABLE `sistema_cidade`
  ADD PRIMARY KEY (`cidId`);

ALTER TABLE `sistema_cliente`
  ADD PRIMARY KEY (`cliId`);

ALTER TABLE `sistema_planos`
  ADD PRIMARY KEY (`plaId`);

ALTER TABLE `sistema_usuario`
  ADD PRIMARY KEY (`usuId`);

ALTER TABLE `sistema_assinatura`
  MODIFY `assId` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5;

ALTER TABLE `sistema_assinatura_cidade`
  MODIFY `ascId` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=33;

ALTER TABLE `sistema_assinatura_cliente`
  MODIFY `ascId` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5;

ALTER TABLE `sistema_assinatura_plano`
  MODIFY `aspId` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=6;

ALTER TABLE `sistema_avaliacao`
  MODIFY `avaId` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2;

ALTER TABLE `sistema_cidade`
  MODIFY `cidId` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5565;

ALTER TABLE `sistema_cliente`
  MODIFY `cliId` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=6;

ALTER TABLE `sistema_planos`
  MODIFY `plaId` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=12;

ALTER TABLE `sistema_usuario`
  MODIFY `usuId` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa, agora que me liguei, eu posso usar desta maneira mesmo, e inserir normalmente no ORDER BY lá embaixo as demais necessidades. Então, acho que o problema tá resolvido! \o/

 

Só preciso saber como deixar as duplicidades da maneira correta. Como um cliente pode ter mais de um plano, ao usar o INNER JOIN, está mostrando mais registros do que deveria. Porém, se eu uso GROUP BY c.cliId, ele ordena errado! Se eu deixar sem, ordena certo, porém, duplicado (exemplo anexo).

 

 

 

Captura de Tela 2017-05-01 às 16.41.05.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para tirar os duplicados é fácil com uma sub-query usando distinct (sub-query é vida hahahaha)
 

SELECT DISTINCT campos... FROM (
  /*
       Sua query aqui, tudo aquilo mesmo!
  */
)t

Importante: Para evitar problemas, na sua query principal

SELECT * FROM sistema_cliente c 
[...]

Tire o asterisco e especifique todos os campos, pois olhei no seu print que a coluna cliId esta duplicando, e isso vai dar erro depois.

A coluna novo_plaId não precisa ser especificada depois do distinct, alias, não estou certo se precisava dar esse nome para ela :)

Compartilhar este post


Link para o post
Compartilhar em outros sites
Citar

... a. Como um cliente pode ter mais de um plano, a ...

 

 

Aí precisa definir o que quervser visto , um contrato , todos etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@EdCesar @Motta mesmo fazendo o Distinct, está trazendo as informações erradas.

 

O ID 6 tem planos com previlégios maiores do que o ID 5, então deveria aparecer na seguinte ordem:

 

1 - 6 - 5

 

E está aparecendo (como mostra o anexo)

 

1 - 5 - 6

 

Detalhe: O ID 5 não possui nenhum plano com o ID 11, 10 e 9 (como mostra no SELECT CASE). Ele deveria aparecer após todos.


    SELECT DISTINCT c.cliId, cliPerfil, cliNome, cliEmail, cliSenha FROM sistema_cliente c 
    INNER JOIN sistema_assinatura_cliente ac ON ac.cliId = c.cliId 
    INNER JOIN (
                SELECT cliId,
                CASE
                    WHEN ap.plaId = 11 THEN 1
                    WHEN ap.plaId = 10 THEN 2
                    WHEN ap.plaId = 09 THEN 3
                END AS novo_plaId
            FROM sistema_assinatura a 
                INNER JOIN sistema_assinatura_cliente ac ON ac.assId = a.assID 
                INNER JOIN sistema_assinatura_plano ap ON ap.assId = a.assID
                WHERE ap.aspSituacao = 3
            ) ap
    ON ap.cliId = c.cliId
    WHERE cliAtivo = 'S' 
    AND cliExcluido = 'N' 
    AND c.cidId IN (
        SELECT cidId FROM sistema_assinatura_cidade 
        WHERE cidId IN (2878)
    ) 
    AND c.cliId IN (
        SELECT cliId FROM sistema_assinatura a 
        INNER JOIN sistema_assinatura_cliente ac ON ac.assId = a.assID 
        INNER JOIN sistema_assinatura_plano ap ON ap.assId = a.assID
        WHERE ap.aspSituacao = 3
    ) 
    ORDER BY novo_plaId
    LIMIT 0,15

 

Captura de Tela 2017-05-06 às 21.35.48.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
    • Por gersonab
      Bom dia
      estou com uma dúvida de como proceder, tenho uma tabela de categoria e uma de subcategoria, a categoria pode ter várias subs, até ai tranquilo, quando faço update de uma sub altero normalmente a quantidade deste, até aí normal, porém me deparei com uma situação um pouco diferente, vou tentar ser o mais claro possível, de certa forma algumas subs são comuns só mudando o nome praticamente, aí eu preciso que ao efetuar o update em umas destas este ocorra nas demais, tipo:
       
      Se o id da sub for 5 , eu preciso fazer o mesmo update nos ids 6 e 7 ;
       
      Se o id da sub for 9 , eu preciso fazer o mesmo update no id 10
       
      se for 2 , fazer o update somente neste
       
      ainda não estou conseguindo ver uma lógica para isso, e ou uma nova coluna para cadastrar em comum nestes casos.
       
      qual seria a melhor opção
    • Por JoaoSilva75
      oi pessoal
       
      se eu entrar no link dos desenvolvedores php pesquisasar quem é programador e enviar uma mesma mensagem para uns 6 ou 8 membros do forum serei advertido   ou é spam ???????
       
      procuro um programador php para me fazer algo 
       
      mas não tem como postar aqui nessa sessão
       
    • Por clovis.sardinha
      Tenho uma consulta de autocomplete no bd que funciona no servidor local e não roda no servidor da web. 
      Ao enviar a consulta no servidor local  aparece no console :Fetch terminou o carregamento: GET ".../Cidade?cidade=sao%20paulo". A pesquisa é feita normalmente.
      Quando mando a mesma pesquisa para o servidor web(locaweb) aparece no console: Fetch terminou o carregamento: GET "..../Cidade?cidade=sao%2520paul".
      O número 25 aparece só no servidor web. Pelo que pesquisei 25 significa %, ou seja, está duplicando o caractere %. 
      Não consegui utilizar nenhuma função para evitar que isto ocorra. Alguém sabe se há alguma configuração no servidor web que possa ser alterada para evitar essa duplicação?
       
    • Por gersonab
      Boa tarde, estou quebrando a cabeça aqui para somar os dados agrupados de vários itens distintos de uma tabela e inserir em outra. tipo :
      $consulta31 = $pdo->query("SELECT SUM(valoror) AS val1, SUM(metros) AS metr, orc, idcatc, idmate FROM orcamencli WHERE orc=$orc GROUP BY idcatc, idmate"); $user331 = $consulta31->fetch(PDO::FETCH_ASSOC); $orcx = $user331['orc']; $idcatcx = $user331['idcatc']; $val1x = $user331['val1']; $metrx = $user331['metr']; $idmatex = $user331['idmate']; o resultado de cada item agrupado eu faria um outro calculo separado para inserir em outra tabela, tipo ...
      a tabela acima eu teria algo assim :
       
      orcx = 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01 - 01
      idcatcx = 11 - 11 - 11 - 11 - 11 - 11 - 11 - 11 - 11
      val1x = 1,00 - 1,00 - 3,00 - 3,00 - 3,00 - 1,00 - 3,00 - 1,00 - 2,00
      metrx =  01 - 01 - 03 - 03 - 03 - 01 - 03 - 01 - 02
      idmatex =  11 - 11 - 21 - 21 - 21 - 31 - 31 - 31 - 31
       
      preciso inserir  na outra tabela o seguinte :
      orc = 01 - 01 - 01
      idcatc = 11 - 11 - 11
      val1 = 2,00 - 9,00 - 7,00 ( aqui não é só a soma dos valores , existe um outro cálculo )
      metr =  02 - 09 - 07
      idmate =  11 -  21 -  31
       
       a dúvida é --> como inserir estes valores separados de uma única vez em outra tabela.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.