Ir para conteúdo

POWERED BY:

Arquivado

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

wneo

UPDATE reorganizando ordem numérica, como fazer?

Recommended Posts

Olá!!!

Pessoal preciso fazer com q o update reorganize uma ordem numérica.

- Imaginem que possuo vários registros em uma tabela, e o que define sua ordem de exibição é uma coluna chamada 'ordem'.

- Quando vou exibir, faço o select com o 'order by ordem'. Até aí tudo ok.

- Mas agora, na tela de gestão que criei, preciso oferecer a possibilidade de atualizar essa ordem.

- Então imaginem que tenho 10 registros. Dessa forma a coluna ordem estará 1,2,3,4,5,6,7,8,9,10.

- Agora se o usuário escolher que que o registro 2 deve ser o 1 a ser exibido. então ele fará o update no 2 para 1.

- Então nesse momento teremos dois registros com numero 1. A 'ordem' ficaria 1,1,3,4,5,6,7,8,9,10. Eis o problema...

- Como posso fazer para que o update ocorra de forma progressiva, atualizando a coluna 'ordem' sequencialmente, reorganizando os numeros da forma certa e não duplicá-los, fazendo com q aquele q era 1 virar 2 e assim por diante?

- E se eu precisasse inserir um novo registro nessa situação.. como ficaria o insert?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você envia todos os dados novamente para update? Ou apenas quele que mudou de ordem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Envio somente aquele que mudou de ordem.

- Por exemplo, digamos q a tabela tem as colunas 'produto','categoria,'ordem'.

- Se quero que o 'Produto1' fique na 'ordem3', faço update nele... mas nesse caso, para corrigir meu caso, precisaria ser feito uma operação em todos os registros com base na coluna 'ordem'...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Envie todos já com a nova ordem. Vai te facilitar muito o trabalho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ideia é boa, poderia ser algo com jquery...

imagino q atraves de campos form option, atualizando onchange...

como poderia ser isso em js, tem noção?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso vai depender de como você realiza a edição da ordem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imaginei em carregar todos da coluna ordem em form select, cada registro em seu select. De 1 a 10 por exemplo.

Então quando quando mudar '.change()' o que tá em 2 pra 3, todos mudarem sua ordem automatica. E quando salvar, realizar o update em todos já ordenados.

Saberia fazer isso em jquery?

...ou pensa em alguma outra forma, diz aí..?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O digitar a ordem é muito subjetivo, faça algo para mover as linhas.

Pronto tem este: https://jqueryui.com/sortable/

Ou construa algo próprio somente com javascript.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O digitar a ordem é muito subjetivo, faça algo para mover as linhas.

Pronto tem este: https://jqueryui.com/sortable/

Ou construa algo próprio somente com javascript.

Oi,

gostei desse:

<ul id="sortable">
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 1</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li>
<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 7</li>
</ul>

Mas como poderia fazer para que o fosse registrado no banco de dados a posição que escolhi..?

por exemplo, arrastei o item1 pra segunda posição, então clico em salvar..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque dentro de um formulário com input hidden e utilize os inputs como array, conforme o exemplo no link abaixo:

http://forum.imasters.com.br/topic/462549-resolvidoretornar-array-de-inputs-com-mesmo-nome/?p=1832412

O PHP receberá conforme a ordem que você definiu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque dentro de um formulário com input hidden e utilize os inputs como array, conforme o exemplo no link abaixo:

http://forum.imasters.com.br/topic/462549-resolvidoretornar-array-de-inputs-com-mesmo-nome/?p=1832412

O PHP receberá conforme a ordem que você definiu.

To tentando montar:

<meta charset="utf-8">
<?php  
require("oraculo/conecta/conecta.php");
//require "../oraculo/sessions/session.php";

require "oraculo/sql/sql_global.php";
?>	

<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery UI Sortable - Default functionality</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <style>
  #sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
  #sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; }
  #sortable li span { position: absolute; ; }
  </style>
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#sortable" ).sortable();
    $( "#sortable" ).disableSelection();
  } );
  </script>
</head>
<body>
 
<ul id="sortable">

<?php	
	while($row = mysql_fetch_array($rs_ordenador)){
	$id = $row['id'];
	$titulo = $row['titulo']; 
	$ordem = $row['ordem'];
?>
  <li class="ui-state-default"> 
  <form>
  <input type="hidden" name="ordem[]" value="<?php echo $ordem; ?>"> 
  </form>
  <span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
  <?php echo $titulo; ?>
  </li>
 
<?php
}//end while
?>  
<button type="submit">Salvar</button>
</ul>
 
 
</body>
</html>

To no caminho certo?

caso sim..agora preciso fazer o script de update... ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma vez eu fiz assim, mas faz tempo

Criei o atributo date-id que é id auto-increment

<tr data-id="9"></tr>

<tr data-id="10"></tr>

<tr data-id="11"></tr>

Conforme atualiza as posições pego sequencia conforme arvore DOM.

 $(this.elemento_nome)[i].getAttribute('data-id')

Depois envio as posições separado por virgula que são as IDs, já no php dou explode na virgula, criando o array, depois percorro com foreach e uso o indice "$key" para gerar as novas posições de 0 a *, na coluna order sempre vai ser default 0, fiz isso para ordenar imagem de produto.

Exemplos tem de KG na internet, o esquema ae é só o php mesmo, que é usar a ID e o indice do array que se inicia com a posição zero.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma vez eu fiz assim, mas faz tempo

Criei o atributo date-id que é id auto-increment

<tr data-id="9"></tr>

<tr data-id="10"></tr>

<tr data-id="11"></tr>

Conforme atualiza as posições pego sequencia conforme arvore DOM.

 $(this.elemento_nome)[i].getAttribute('data-id')

Depois envio as posições separado por virgula que são as IDs, já no php dou explode na virgula, criando o array, depois percorro com foreach e uso o indice "$key" para gerar as novas posições de 0 a *, na coluna order sempre vai ser default 0, fiz isso para ordenar imagem de produto.

Exemplos tem de KG na internet, o esquema ae é só o php mesmo, que é usar a ID e o indice do array que se inicia com a posição zero.

Gostei da ideia.. mas ainda fiquei perdido...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imagino uma forma de fazer que seria mais simples, assim:

- Atualmente o Produto x está na posição 7, e decido q ele deve ficar na 3.

- Então o update deveria ocorrer incrementando +1 naquele que era antigamente o 3 até o 6.

vou tentar iniciar o codigo:

<?php

require "conecta.php";

$id_produto_escolhido = $_POST['id'];
$ordem_escolhida = $_POST['ordem'];//essa é a ordem q o usuario escolheu para determinado produto

$up_escolhido = "UPDATE produtos SET ordem = '$ordem_escolhida' WHERE id = '$id_escolhido'";
$rs_escolhido = mysql_query($up_escolhido);

$seleciona_ordem_igual = "SELECT * FROM tabela WHERE ordem='$ordem_escolhida'";
$rs_ordem_igual = mysql_query($seleciona_ordem_igual );

	
	while($row = mysql_fetch_array($rs_ordem_igual)){
	$ordem = $row['ordem'];
        }


###########Agora nessa parte teria que fazer um update com +1,
###########começando por aquele que tem a ordem igual a escolhida até o produto($id_produto_escolhido) 
###########que foi selecionado para mudar de posição. Imagino que seja necessário um for aqui para isso,
###########peço ajuda aí..  




?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

...Enquanto isso, olha como to tentando:

- adicionei 3 registros no banco e estou exibindo assim:

<meta charset="utf-8">
<?php  
require("oraculo/conecta/conecta.php");
//require "../oraculo/sessions/session.php";

require "oraculo/sql/sql_global.php";
?>	

<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Ordenar</title>
  <link rel="stylesheet" href="css/global.css">
 
  
</head>
<body>
 

<?php	
	while($row = mysql_fetch_array($rs_ordenador)){
	$id = $row['id'];
	$titulo = $row['titulo']; 
	$ordem = $row['ordem'];
?>
<li>
<?php echo $titulo; ?>
<form method="post" action="oraculo/form-operation/update/up-ordem.php">
<label></label>
<select name="ordem">
<option value="<?php echo $ordem; ?>" ><?php echo $ordem; ?></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<button>Salvar</button>
<input type="hidden" name="id" value="<?php echo $id; ?>">
</form> 
</li> 
<?php
}//end while
?>  
 
</body>
</html> 

- E o update estou fazendo assim:

<meta charset="utf-8">
<?php

require "../../conecta/conecta.php";

$id = $_POST['id'];
$ordem_escolhida = $_POST['ordem'];


$up_igual = "UPDATE ordenador SET ordem = ordem+1 WHERE id != '$id'";
$rs_igual = mysql_query($up_igual);	


$up_escolhido = "UPDATE ordenador SET ordem = '$ordem_escolhida' WHERE id = '$id'";
$rs_escolhido = mysql_query($up_escolhido);	

header("location:../../../index.php");


?> 

- Quando mudo o 3 pra 1, tudo certo, mas quando mudo de 2 pra 1, acaba ficando 1,2,4... =/

e agora...??? como resolver...

Compartilhar este post


Link para o post
Compartilhar em outros sites

- Quando mudo o 3 pra 1, tudo certo, mas quando mudo de 2 pra 1, acaba ficando 1,2,4... =/

e agora...??? como resolver...

Fazendo da forma correta e evitando Gambiarras, assista o vídeo que passei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fazendo da forma correta e evitando Gambiarras, assista o vídeo que passei.

hshs.. sim, quero fazer da forma certa sem gambiarra... estou pensando no código pra isso..

vou assistir...

Compartilhar este post


Link para o post
Compartilhar em outros sites

assisti o video, mas ainda não me resolveu...

com esse codigo tá quase.. se alguem conseguir complementar me avisa aí:

<meta charset="utf-8">
<?php

require "../../conecta/conecta.php";

$id = $_POST['id'];
$ordem_escolhida = $_POST['ordem'];


$up_igual = "UPDATE ordenador SET ordem = ordem+1 WHERE id != '$id'";
$rs_igual = mysql_query($up_igual);	


$up_escolhido = "UPDATE ordenador SET ordem = '$ordem_escolhida' WHERE id = '$id'";
$rs_escolhido = mysql_query($up_escolhido);	

header("location:../../../index.php");


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

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