Ir para conteúdo

Arquivado

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

androide

Ordenar Menu

Recommended Posts

Boa tarde,

 

Estou com um problema relacionado a ordenação e customização do mesmo.

Tenho uma tabela de menus que constam as colunas id, id_parent, titulo,  ordem

onde possuem a seguinte construção:

CREATE TABLE `menus_subsites_itens` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `id_parent` int(11) DEFAULT NULL,
   `titulo` varchar(45) NOT NULL,
   `ordem` float NOT NULL DEFAULT '0'
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1

o id_parent quando aplicado será do id do pai, a ordem recebe no momento da criação o mesmo valor do id para seguir o padrão de ordenação.

O ordem quando modificado pode receber um float dependendo da posição que será colocado tipo entre 1 e 2 executo uma formula (1/2)+1, se quero colocar o item depois do 2 executo a formula (1/2) + 2 antes do 1 executo a formula  (1/2)

 

Encontrei o seguinte código sobre agrupamentos na consulta:

select * from menus_subsites_itens order by COALESCE(id_parent, id),id_parent is not null, ordem;

 

Ele funciona bem, se a ordem possui sincronismo, porém se desejo criar um novo subitem tipo id 30 com ordem 30 e quiser colocá-lo como subitem de um item do topo, a construção coalesce, não funciona adequadamente, pois coloca na parte inferior fora do subitens .

 

Existe uma forma melhor para que consiga fazer os agrupamentos e ordenações corretamente, podendo muda-las sem tantos transtornos?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por unset
      Olá, alguém poderia me dar uma luz.
       
      Como faço para ordenar strings que começam com números, exemplo
       
      Tenho uma lista de artigos e os nomes são como abaixo.
       
      1 - NOME DO ARQUIVO 1
      2 - NOME DO ARQUIVO 2
      etc....
      10 - NOME DO ARQUIVO 10
       
      Não consegui ordenar no SELECT com o ORDER BY nome DESC pq o número 10 fica abaixo do 1
       
      Como fazer assim, 1,2,3,4,5....... 10,11,12 .... 100, 101,102 etc...
    • Por karlaroberta
      Bom dia. Pessoal, estou criando um relatório em Crystal Reports que apresenta o total de valores movimentados por conta. No cadastro das contas, tenho um campo que determina se aquela conta é de Receita ou Despesa. sendo assim criei um agrupamento  por tipo (Receita/Despesa) e outro por codigo de conta, no entanto, há contas que não possuem movimentação no período de geração do relatório, mas preciso apresentar estas contas com valor zerado.
      Criei uma view para unificar os documentos de receita e despesa que são de origens diferentes e vinculei à tabela de contas e deixei esta de contas como principal(Junção externa esquerda)
      Criei uma formula abaixo e outra formula com  a mesma  verificação por tipo, e coloquei no cabeçalho de cada respectivo grupo, mas ainda assim não apresenta as contas sem valor movimentado. Teriam alguma sugestão?
       
      if  isnull(SUM({VW_PAGRAT_RECRAT.VALOR},{PAGCLA.CODCLAP}))  then
      FORMULA=0 else
         FORMULA= sum({VW_PAGRAT_RECRAT.VALOR},{PAGCLA.CODCLAP})
      END IF
    • Por ViniciusHSAraujo
      Bom dia pessoal,
       
      Sou iniciante na área de desenvolvimento e estou fazendo um sistema para o comércio do meu pai para aprimorar meus conhecimentos em PHP e em lógica de programação no geral.
       
      O sistema já está quase pronto, só falta uns relatórios que estou gerando e estou com dificuldade em um:
       
      Quero gerar uma listagem com os últimos lançamentos agrupados pela data, tipo assim:
       

       
      No MySQL fiz o seguinte select:
      SELECT DATE_FORMAT(p.pontuacao_data, '%d/%m/%Y') AS dia, DATE_FORMAT(p.pontuacao_data, '%H:%i') AS horario, u.usuario_nome AS nome, p.usuario_telefone AS telefone, p.pontuacao_valor AS pontuacao_inserida FROM pontuacao p, usuario u WHERE u.usuario_telefone = p.usuario_telefone AND p.pontuacao_valor <> 0 ORDER BY pontuacao_data DESC Ele me retorna todas as informações que preciso, porém não faço ideia (e não soube explicar o google para fazer uma pesquisa que trouxesse o que preciso) como fazer para aparecer a data só no primeiro registro com tal data. 
       
      Como está atualmente:
      <table class="table table-bordered table-striped table-vcenter js-dataTable-full" id="historico_lancamentos"> <thead> <tr> <th class="text-center d-none d-sm-table-cell">Dia</th> <th class="text-center d-none d-sm-table-cell">Horario</th> <th class="text-center d-none d-sm-table-cell">Nome do CLiente</th> <th class="text-center d-none d-sm-table-cell">Telefone</th> <th class="text-center d-none d-sm-table-cell">Pontuação Inserida</th> </tr> </thead> <tbody> <?php foreach ($lancamentos as $lancamento) { ?> <tr role="row" class="odd"> <td class="text-center"><?=$lancamento['dia']?></td> <td class="text-center"><?=$lancamento['horario']?></td> <td class="text-center"><?=$lancamento['nome']?></td> <td class="text-center"><?=$lancamento['telefone']?></td> <td class="text-center"><?=$lancamento['pontuacao_inserida']?></td> </tr> <?php } ?> </tbody> </table>  
      Tô usando o plugin DataTables (https://datatables.net/) caso ajude em alguma coisa..
       
      Alguém poderia me dar uma ajuda aí? Agradeço desde já e espero que tenha conseguido explicar rsrs..
    • Por pzt
      Olá, galera. 
       
      Sou iniciante no php, tenho uma dúvida. Veja se podem me ajudar, por favor!
       
      ( [cd_produto] => 1 [ds_produto] => SAPATENIS PEGADA [ds_longa] => SAPATENIS PEGADA MARINHO 170502G2 [cd_marca] => 70 [cd_cor] => 22 [cd_tamanho] => 25 [peso_liquido] => 0.700000 [peso_bruto] => 0.700000 [altura] => 12.000000 [largura] => 21.000000 [profundidade] => 32.000000 [cubagem] => 0.00810000 [vl_venda] => 140.90 [qt_estoque] => 1.00 [ds_categoria] => SAPATENIS [ds_cor] => MARINHO [ds_tamanho] => 43 ) ( [cd_produto] => 1 [ds_produto] => SAPATENIS PEGADA [ds_longa] => SAPATENIS PEGADA MARINHO 170502G2 [cd_marca] => 70 [cd_cor] => 22 [cd_tamanho] => 26 [peso_liquido] => 0.700000 [peso_bruto] => 0.700000 [altura] => 12.000000 [largura] => 21.000000 [profundidade] => 32.000000 [cubagem] => 0.00810000 [vl_venda] => 140.90 [qt_estoque] => 2.00 [ds_categoria] => SAPATENIS [ds_cor] => MARINHO [ds_tamanho] => 44 ) ( [cd_produto] => 1 [ds_produto] => SAPATENIS PEGADA [ds_longa] => SAPATENIS PEGADA MARINHO 170502G2 [cd_marca] => 70 [cd_cor] => 22 [cd_tamanho] => 27 [peso_liquido] => 0.700000 [peso_bruto] => 0.700000 [altura] => 12.000000 [largura] => 21.000000 [profundidade] => 32.000000 [cubagem] => 0.00810000 [vl_venda] => 140.90 [qt_estoque] => 5.00 [ds_categoria] => SAPATENIS [ds_cor] => MARINHO [ds_tamanho] => 45 )  
      Em cada chave, a descrição é a mesma, o valor também, mas alguns itens, como qt_estoque, ds_categoria, ds_cor e ds_tamanho, são diferentes. 
       
      Eu precisaria agrupar tudo em um único array, quando a ds_longa for igual. 
       
      Segue o script: 
      $Select = new Select; $Select->FullSelect('SELECT * FROM produto LEFT OUTER JOIN produto_categoria ON produto.cd_produto = produto_categoria.cd_produto LEFT OUTER JOIN categoria ON produto_categoria.cd_categoria = categoria.cd_categoria LEFT OUTER JOIN cor ON cor.cd_cor = produto.cd_cor LEFT OUTER JOIN tamanho ON tamanho.cd_tamanho = produto.cd_tamanho'); if ($Select->getResult()): $Products = $Select->getResult(); foreach ($Products as $Product): print_r($Product); endforeach; endif;  
      O que podem me ajudar?
      Desde já, muito obrigado! 
       
       
    • Por joelzsbit
      Pessoal, como que faço para gravar a ordem das imagens que foi ordenada com o mouse, usando esse codigo:
      <!DOCTYPE HTML> <html> <head> <style> #div1, #div2, #div3 { float: left; width: 100px; height: 35px; margin: 10px; padding: 10px; border: 1px solid black; } </style> <script> function allowDrop(ev) { ev.preventDefault(); } function drag(ev) { ev.dataTransfer.setData("text", ev.target.id); } function drop(ev) { ev.preventDefault(); var data = ev.dataTransfer.getData("text"); ev.target.appendChild(document.getElementById(data)); } </script> </head> <body> <h2>Drag and Drop</h2> <p>Drag the image back and forth between the two div elements.</p> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"> <img src="/imagens/img_cod/924081810.gif" draggable="true" ondragstart="drag(event)" id="drag1" width="88" height="31"> </div> <div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"> <img src="/imagens/img_cod/924081810.gif" draggable="true" ondragstart="drag(event)" id="drag1" width="88" height="31"> </div> <div id="div3" ondrop="drop(event)" ondragover="allowDrop(event)"></div> </body> </html>  
×

Informação importante

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